package com.aggrepoint.winlet.site.domain;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
import com.aggrepoint.winlet.AuthorizationEngine;
/**
*
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class Branch extends Base {
private String path;
private boolean isStatic;
private String template;
private Hashtable<String, String> templatePrefixes;
/** 仅用于static branch,当用户给定的URL没有对应的文件存在则使用index对应的文件 */
private String index;
private List<Area> areas = new ArrayList<Area>();
private Page rootPage;
public Branch() {
rootPage = new Page();
rootPage.setName("");
rootPage.setPath("/");
rootPage.setDir("/");
rootPage.setSkip(true);
rootPage.setBranch(this);
}
public void init() {
Collections.sort(areas);
for (Area area : areas)
area.setCascade(true);
Collections.sort(rootPage.getPages());
for (Page p : rootPage.getPages())
p.init(rootPage, areas, template, templatePrefixes);
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean isStatic() {
return isStatic;
}
public void setStatic(boolean isStatic) {
this.isStatic = isStatic;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
public Hashtable<String, String> getTemplatePrefixes() {
return templatePrefixes;
}
public void setTemplatePrefixes(Hashtable<String, String> templatePrefixes) {
this.templatePrefixes = templatePrefixes;
}
public String getIndex() {
return index;
}
public void setIndex(String index) {
this.index = index;
}
public List<Area> getAreas() {
return areas;
}
public void addArea(Area area) {
areas.add(area);
}
public Page getRootPage() {
return rootPage;
}
public Page getHome(AuthorizationEngine ap) {
List<Page> pages = rootPage.getPages(ap, true, true, false);
if (pages.size() == 0)
return null;
return pages.get(0).findNotSkip(ap);
}
public Page findPage(String path, AuthorizationEngine ap) {
if (!path.endsWith("/"))
path = path + "/";
Page f = rootPage.findPage(path, ap);
return f == null || f == rootPage ? getHome(ap) : f.findNotSkip(ap);
}
}