cms系统的资源功能原先是根据linux服务器的目录结构生成的数,把无用的空目录也显示出来了。所以考虑由数据库存储的资源文件路径生成数。
根据数据库资源路径生成的树结构如下:
详细代码:
/**
* @param path 站点目录
* @description 根据数据库记录的路径字符串解析某个站点下的目录,以树结构封装
* @modified 根据数据库遍历
*/
public ResFolder parseFolderSql(Long siteId) {
ResFolder resFolderr = new ResFolder();
ArrayList<String> list = resManager.findResTreeList(siteId);
if (list != null) {
resFolderr.setResFolderName(site_res_path.substring(site_res_path.lastIndexOf("/") + 1));
resFolderr.setResFolderParent(null);
resFolderr.setResFolderPath(site_res_path);
Set<ResFolder> childs = new LinkedHashSet<ResFolder>();
for (int i = 0; i < list.size(); i++) {
if (!"/".equals(list.get(i))) {
String fullPath = list.get(i);
String strTemp = fullPath.substring(1);
if (strTemp != null && !"".equals(strTemp)) {
String selfStr = "";
if (strTemp.indexOf("/") == -1) {
selfStr = fullPath;
} else {
int strP = strTemp.indexOf("/") + 1;
selfStr = fullPath.substring(0, strP);
}
if (selfStr != null && !"".equals(selfStr)) {
List<String> l = new ArrayList<String>();
for (int j = 0; j < list.size(); j++) {
String tempStr = list.get(j);
if (tempStr.indexOf(selfStr) == 0&&!tempStr.equals(selfStr)) {
l.add(tempStr);
list.set(j, "/");
}
}
if (l != null) {
ResFolder child = parseNext(resFolderr,selfStr, l);
childs.add(child);
}
}
}
}
}
resFolderr.setResFolderChilder(childs);
}
return resFolderr;
}
/**
* 根据数据库存储的文件路径生成树遍历方法
* @param pfolder 父节点
* @param nPath 父节点路径
* @param l 子搜索列表
* @return
*/
public ResFolder parseNext(ResFolder pfolder, String nPath, List<String> l) {
ResFolder resFolderr = new ResFolder();
if (l != null) {
resFolderr.setResFolderName(nPath.substring(nPath.lastIndexOf("/") + 1));
resFolderr.setResFolderParent(pfolder);
resFolderr.setResFolderPath(nPath);
Set<ResFolder> childs = new LinkedHashSet<ResFolder>();
for (int i = 0; i < l.size(); i++) {
if (!"/".equals(l.get(i))) {
String fullPath = l.get(i);
String strTemp = fullPath.substring(fullPath.indexOf(nPath)
+ nPath.length() + 1);
if (strTemp != null && !"".equals(strTemp)
&& !fullPath.equals(strTemp)) {
String selfStr = "";
if (strTemp.indexOf("/") == -1) {
selfStr = fullPath;
} else {
int strP = strTemp.indexOf("/") + nPath.length()
+ 1;
selfStr = fullPath.substring(0, strP);
}
if (selfStr != null && !"".equals(selfStr)) {
ArrayList<String> list = new ArrayList<String>();
for (int j = 0; j < l.size(); j++) {
String tempStr = l.get(j);
if (tempStr.indexOf(selfStr) == 0
&& !tempStr.equals(selfStr)) {
list.add(tempStr);
l.set(j, "/");
}
}
if (list != null) {
ResFolder child = parseNext(resFolderr,
selfStr, list);
childs.add(child);
}
}
}
}
}
resFolderr.setResFolderChilder(childs);
}
return resFolderr;
}