package com.aggrepoint.winlet.site.dao.fs;
import java.io.File;
import java.util.Hashtable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.aggrepoint.winlet.site.domain.Area;
import com.aggrepoint.winlet.site.domain.Page;
/**
*
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class PageDao {
static final Log logger = LogFactory.getLog(PageDao.class);
public static Page load(File dir, String contextRoot) {
if (!dir.isDirectory())
return null;
try {
Page page = new Page();
Utils.getNameAndOrder(page, dir);
page.setPath(page.getName());
Hashtable<String, String> cfgs = Utils.loadCfg(dir);
for (String str : cfgs.keySet()) {
if (str.startsWith("data."))
page.addData(str.substring(5), cfgs.get(str));
else if (str.startsWith("arearule.")) {
String key = str.substring(9);
int idx = key.indexOf(".");
if (idx > 0 && idx < key.length() - 1) {
page.addAreaMap(key.substring(0, idx).trim(), key
.substring(idx + 1).trim(), cfgs.get(str));
}
}
}
page.setNameCfg(cfgs.get("nameCfg"));
page.setName(cfgs.get("name"));
if (page.getName() == null)
page.setName(page.getPath());
page.setRule(cfgs.get("rule"));
page.setExpandRule(cfgs.get("expand-rule"));
page.setTemplate(cfgs.get("template"));
page.setTemplatePrefixes(BranchDao.parseTemplatePrefix(cfgs
.get("template-prefix")));
page.setLink(cfgs.get("link"));
page.setTitle(cfgs.get("title"));
page.setSkip("".equals(cfgs.get("skip"))
|| "true".equalsIgnoreCase(cfgs.get("skip")));
page.setHide("".equals(cfgs.get("hide"))
|| "true".equalsIgnoreCase(cfgs.get("hide")));
page.setExpand("".equals(cfgs.get("expand"))
|| "true".equalsIgnoreCase(cfgs.get("expand")));
page.setStatic("".equals(cfgs.get("static"))
|| "true".equalsIgnoreCase(cfgs.get("static")));
page.setExpandAreas(cfgs.get("expand-area"));
if (!page.isStatic()) // 静态目录里面所有内容都视为静态内容,不再作为子目录处理
for (File f : dir.listFiles()) {
if (f.isDirectory()) { // 页面
Page p = load(f, contextRoot);
if (p != null)
page.addPage(p);
} else if (f.getName().endsWith(".html")) { // area内容
Area a = AreaDao.load(f, contextRoot);
if (a != null)
page.addArea(a);
}
}
return page;
} catch (Exception e) {
logger.error("Error load area: " + dir.getAbsolutePath(), e);
return null;
}
}
}