package com.jspxcms.core.domain;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Transient;
import org.apache.commons.lang3.StringUtils;
import com.jspxcms.core.support.ForeContext;
/**
* Site
*
* @author liufang
*
*/
@Entity
@Table(name = "cms_site")
public class Site implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Transient
public String getUrl() {
return getUrl(getWithDomain());
}
@Transient
public String getUrlFull() {
return getUrl(true);
}
@Transient
public String getUrl(boolean isFull) {
StringBuilder sb = new StringBuilder();
if (isFull) {
sb.append("//").append(getDomain());
if (getPort() != null) {
sb.append(":").append(getPort());
}
}
if (StringUtils.isNotBlank(getContextPath())) {
sb.append(getContextPath());
}
return sb.toString();
}
/**
* 获得当前模板主题的资源文件路径
*
* 例如:/jspxcms/files/1/bluewise/_files
*
* @param path
* @return
*/
@Transient
public String getFilesPath() {
return getFilesPath(null);
}
/**
* 获得当前模板主题的资源文件路径
*
* 例如:/jspxcms/files/1/bluewise/_files
*
* @param path
* @return
*/
@Transient
public String getFilesPath(String path) {
return getFilesPath(path, true);
}
/**
* 获得当前模板主题的资源文件路径
*
* 例如:/jspxcms/files/1/bluewise/_files 或 /files/1/bluewise/_files
*
* @param path
* @return
*/
@Transient
public String getFilesPath(String path, boolean withContextPath) {
StringBuilder sb = new StringBuilder();
if (withContextPath && StringUtils.isNotBlank(getContextPath())) {
sb.append(getContextPath());
}
sb.append(ForeContext.FILES_PATH);
sb.append("/").append(getId());
sb.append("/").append(getTemplateTheme());
sb.append("/").append(ForeContext.FILES);
if (StringUtils.isNotBlank(path)) {
sb.append(path);
}
return sb.toString();
}
/**
* 获得模板路径
*
* 例如:/1/bluewise/index.html
*
* @param tpl
* @return
*/
@Transient
public String getTemplate(String tpl) {
StringBuilder sb = new StringBuilder();
sb.append("/").append(getId());
sb.append("/").append(getTemplateTheme());
if (!tpl.startsWith("/")) {
sb.append("/");
}
sb.append(tpl);
return sb.toString();
}
/**
* 获得模板的基础路径
*
* 例如:/files/1
*
* @param path
* @return
*/
@Transient
public String getFilesBasePath(String path) {
StringBuilder sb = new StringBuilder();
sb.append(ForeContext.FILES_PATH);
sb.append("/").append(getId());
if (StringUtils.isNotBlank(path)) {
if (!path.startsWith("/")) {
sb.append("/");
}
sb.append(path);
}
return sb.toString();
}
@Transient
public String getProtocol() {
return getGlobal() != null ? getGlobal().getProtocol() : null;
}
@Transient
public Integer getPort() {
return getGlobal() != null ? getGlobal().getPort() : null;
}
@Transient
public String getContextPath() {
return getGlobal() != null ? getGlobal().getContextPath() : null;
}
@Transient
public String getNoPictureUrl() {
return getFilesPath(getNoPicture());
}
@Transient
public String getFullNameOrName() {
String fullName = getFullName();
return StringUtils.isBlank(fullName) ? getName() : fullName;
}
@Transient
public SiteWatermark getWatermark() {
return new SiteWatermark(this);
}
@Transient
public Object getConf(String className) {
try {
return Class.forName(className).getConstructor(Site.class)
.newInstance(this);
} catch (Exception e) {
throw new IllegalArgumentException("Class '" + className
+ "' is not Conf Class", e);
}
}
@Transient
public void applyDefaultValue() {
}
private Integer id;
private List<Site> children = new ArrayList<Site>();
private Map<String, String> customs = new HashMap<String, String>();
private Global global;
private Org org;
private Site parent;
private String name;
private String number;
private String fullName;
private String htmlPath;
private String domain;
private Boolean withDomain;
private String templateTheme;
private String noPicture;
private String treeNumber;
private Integer treeLevel;
private String treeMax;
@Id
@Column(name = "f_site_id", unique = true, nullable = false)
@TableGenerator(name = "tg_cms_site", pkColumnValue = "cms_site", table = "t_id_table", pkColumnName = "f_table", valueColumnName = "f_id_value", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_cms_site")
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
@OrderBy(value = "treeNumber asc, id asc")
public List<Site> getChildren() {
return children;
}
public void setChildren(List<Site> children) {
this.children = children;
}
@ElementCollection
@CollectionTable(name = "cms_site_custom", joinColumns = @JoinColumn(name = "f_site_id"))
@MapKeyColumn(name = "f_key", length = 50)
@Column(name = "f_value", length = 2000)
public Map<String, String> getCustoms() {
return this.customs;
}
public void setCustoms(Map<String, String> customs) {
this.customs = customs;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "f_parent_id")
public Site getParent() {
return parent;
}
public void setParent(Site parent) {
this.parent = parent;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "f_global_id", nullable = false)
public Global getGlobal() {
return this.global;
}
public void setGlobal(Global global) {
this.global = global;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "f_org_id", nullable = false)
public Org getOrg() {
return org;
}
public void setOrg(Org org) {
this.org = org;
}
@Column(name = "f_name", nullable = false, length = 100)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "f_number", length = 100)
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Column(name = "f_full_name", length = 100)
public String getFullName() {
return this.fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
@Column(name = "f_html_path", length = 100)
public String getHtmlPath() {
return this.htmlPath;
}
public void setHtmlPath(String htmlPath) {
this.htmlPath = htmlPath;
}
@Column(name = "f_domain", nullable = false, length = 100)
public String getDomain() {
return this.domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
@Column(name = "f_is_with_domain", nullable = false, length = 1)
public Boolean getWithDomain() {
return this.withDomain;
}
public void setWithDomain(Boolean withDomain) {
this.withDomain = withDomain;
}
@Column(name = "f_template_theme", nullable = false, length = 100)
public String getTemplateTheme() {
return this.templateTheme;
}
public void setTemplateTheme(String templateTheme) {
this.templateTheme = templateTheme;
}
@Column(name = "f_no_picture", nullable = true)
public String getNoPicture() {
return noPicture;
}
public void setNoPicture(String noPicture) {
this.noPicture = noPicture;
}
@Column(name = "f_tree_number", nullable = false, length = 100)
public String getTreeNumber() {
return this.treeNumber;
}
public void setTreeNumber(String treeNumber) {
this.treeNumber = treeNumber;
}
@Column(name = "f_tree_level", nullable = false)
public Integer getTreeLevel() {
return this.treeLevel;
}
public void setTreeLevel(Integer treeLevel) {
this.treeLevel = treeLevel;
}
@Column(name = "f_tree_max", nullable = false, length = 20)
public String getTreeMax() {
return this.treeMax;
}
public void setTreeMax(String treeMax) {
this.treeMax = treeMax;
}
}