1
14
15 package com.liferay.documentlibrary.util;
16
17 import com.liferay.portal.kernel.util.FileUtil;
18 import com.liferay.portal.kernel.util.StringBundler;
19 import com.liferay.portal.kernel.util.StringPool;
20 import com.liferay.portal.kernel.util.StringUtil;
21 import com.liferay.portlet.documentlibrary.util.DLUtil;
22
23 import java.io.File;
24
25
34 public class AdvancedFileSystemHook extends FileSystemHook {
35
36 protected void buildPath(StringBundler sb, String fileNameFragment) {
37 int fileNameFragmentLength = fileNameFragment.length();
38
39 if ((fileNameFragmentLength <= 2) || (getDepth(sb.toString()) > 3)) {
40 return;
41 }
42
43 for (int i = 0;i < fileNameFragmentLength;i += 2) {
44 if ((i + 2) < fileNameFragmentLength) {
45 sb.append(fileNameFragment.substring(i, i + 2));
46 sb.append(StringPool.SLASH);
47
48 if (getDepth(sb.toString()) > 3) {
49 return;
50 }
51 }
52 }
53
54 return;
55 }
56
57 protected int getDepth(String path) {
58 String[] fragments = StringUtil.split(path, StringPool.SLASH);
59
60 return fragments.length;
61 }
62
63 protected File getDirNameDir(
64 long companyId, long repositoryId, String dirName) {
65
66 File repositoryDir = getRepositoryDir(companyId, repositoryId);
67
68 return new File(repositoryDir + StringPool.SLASH + dirName);
69 }
70
71 protected File getFileNameDir(
72 long companyId, long repositoryId, String fileName) {
73
74 String ext = StringPool.PERIOD + FileUtil.getExtension(fileName);
75
76 StringBundler sb = new StringBundler();
77
78 String fileNameFragment = FileUtil.stripExtension(fileName);
79
80 if (fileNameFragment.startsWith("DLFE-")) {
81 fileNameFragment = fileNameFragment.substring(5);
82
83 sb.append("DLFE" + StringPool.SLASH);
84 }
85
86 buildPath(sb, fileNameFragment);
87
88 File repositoryDir = getRepositoryDir(companyId, repositoryId);
89
90 File fileNameDir = new File(
91 repositoryDir + StringPool.SLASH + sb.toString() +
92 StringPool.SLASH + fileNameFragment + ext);
93
94 return fileNameDir;
95 }
96
97 protected File getFileNameVersionFile(
98 long companyId, long repositoryId, String fileName, String version) {
99
100 String ext = StringPool.PERIOD + FileUtil.getExtension(fileName);
101
102 int pos = fileName.lastIndexOf(StringPool.SLASH);
103
104 if (pos == -1) {
105 StringBundler sb = new StringBundler();
106
107 String fileNameFragment = FileUtil.stripExtension(fileName);
108
109 if (fileNameFragment.startsWith("DLFE-")) {
110 fileNameFragment = fileNameFragment.substring(5);
111
112 sb.append("DLFE" + StringPool.SLASH);
113 }
114
115 buildPath(sb, fileNameFragment);
116
117 File repositoryDir = getRepositoryDir(companyId, repositoryId);
118
119 return new File(
120 repositoryDir + StringPool.SLASH + sb.toString() +
121 StringPool.SLASH + fileNameFragment + ext +
122 StringPool.SLASH + fileNameFragment +
123 StringPool.UNDERLINE + version + ext);
124 }
125 else {
126 File fileNameDir = getDirNameDir(companyId, repositoryId, fileName);
127
128 String fileNameFragment = FileUtil.stripExtension(
129 fileName.substring(pos + 1));
130
131 return new File(
132 fileNameDir + StringPool.SLASH + fileNameFragment +
133 StringPool.UNDERLINE + version + ext);
134 }
135 }
136
137 protected String getHeadVersionNumber(
138 long companyId, long repositoryId, String fileName) {
139
140 File fileNameDir = getFileNameDir(companyId, repositoryId, fileName);
141
142 if (!fileNameDir.exists()) {
143 return DEFAULT_VERSION;
144 }
145
146 String[] versionNumbers = FileUtil.listFiles(fileNameDir);
147
148 String headVersionNumber = DEFAULT_VERSION;
149
150 for (int i = 0; i < versionNumbers.length; i++) {
151 String versionNumberFragment = versionNumbers[i];
152
153 int pos = versionNumberFragment.lastIndexOf(StringPool.UNDERLINE);
154
155 if (pos > -1) {
156 versionNumberFragment = versionNumberFragment.substring(
157 pos + 1);
158 }
159
160 String versionNumber = versionNumberFragment;
161
162 if (DLUtil.compareVersions(versionNumber, headVersionNumber) > 0) {
163 headVersionNumber = versionNumber;
164 }
165 }
166
167 return headVersionNumber;
168 }
169
170 }