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