/*
* $Id: ICDomainBMPBean.java,v 1.4 2007/04/09 22:17:59 tryggvil Exp $
* Created on 25.11.2005 in project com.idega.core
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.core.builder.data;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.data.GenericEntity;
import com.idega.data.IDOLookup;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.query.Criteria;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.OR;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.Table;
import com.idega.user.data.GroupDomainRelation;
import com.idega.user.data.GroupDomainRelationHome;
import com.idega.user.data.GroupDomainRelationTypeBMPBean;
import com.idega.util.LocaleUtil;
/**
* <p>
* Default implementation of ICDomain and mapping of the IB_DOMAIN Table.
* </p>
* Last modified: $Date: 2007/04/09 22:17:59 $ by $Author: tryggvil $
*
* @author <a href="mailto:tryggvil@idega.com">tryggvil</a>
* @version $Revision: 1.4 $
*/
public class ICDomainBMPBean extends GenericEntity implements ICDomain{
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = -1390285582951301632L;
public static final String tableName = "IB_DOMAIN";
public static final String domain_name = "DOMAIN_NAME";
public static final String domain_url = "URL";
public static final String start_page = "START_IB_PAGE_ID";
public static final String start_template = "START_IB_TEMPLATE_ID";
public static final String COLUMNNAME_GROUP_ID = "GROUP_ID";
public static final String COLUMNNAME_SERVER_NAME = "SERVER_NAME";
public static final String COLUMNNAME_SERVER_PORT = "SERVER_PORT";
public static final String COLUMNNAME_SERVER_PROTOCOL = "SERVER_PROTOCOL";
public static final String COLUMNNAME_SERVER_CONTEXT_PATH = "SERVER_CONTEXT_PATH";
public static final String COLUMNNAME_DEFAULT_LOCALE= "DEFAULT_LOCALE";
public static final String COLUMNNAME_TYPE= "DOMAIN_TYPE";
public static final String COLUMNNAME_SERVER_ALIASES= "SERVER_ALIASES";
//private static Map cachedDomains;
public ICDomainBMPBean() {
super();
}
public void initializeAttributes() {
addAttribute(getIDColumnName());
addAttribute(getColumnDomainName(),"Domain name",true,true,String.class);
addAttribute(getColumnURL(),"Domain URL",true,true,String.class,1000);
addAttribute(getColumnStartPage(),"Start Page",true,true,Integer.class,"many-to-one",ICPage.class);
addAttribute(getColumnStartTemplate(),"Start Template",true,true,Integer.class,"many-to-one",ICPage.class);
addAttribute(COLUMNNAME_SERVER_NAME,"Server NAME",true,true,String.class);
// this.addManyToManyRelationShip(Group.class);
// addAttribute(COLUMNNAME_GROUP_ID,"Group ID",true,true,Integer.class,"one-to-one",Group.class);
//Add a UUID column to uniquely identify the domain:
super.addUniqueIDColumn();
addAttribute(COLUMNNAME_SERVER_PORT,"Server port",Integer.class);
addAttribute(COLUMNNAME_SERVER_PROTOCOL,"Server protocol",String.class,30);
addAttribute(COLUMNNAME_SERVER_CONTEXT_PATH,"Server context path",String.class);
addAttribute(COLUMNNAME_DEFAULT_LOCALE,"Domain Default Locale",String.class,5);
addAttribute(COLUMNNAME_TYPE,"Domain Type",String.class,20);
addAttribute(COLUMNNAME_SERVER_ALIASES,"Server Aliases",String.class,255);
}
/*public static ICDomain getDomain(int id)throws SQLException {
ICDomain theReturn;
theReturn = (ICDomain)getDomainsMap().get(new Integer(id));
if (theReturn == null) {
try {
ICDomainHome domainHome = (ICDomainHome) IDOLookup.getHome(ICDomain.class);
theReturn = domainHome.findByPrimaryKey(new Integer(id));
} catch (Exception e) {
throw new SQLException(e.getMessage());
}
if (theReturn != null) {
getDomainsMap().put(new Integer(id),theReturn);
}
}
return(theReturn);
}*/
/*private static Map getDomainsMap() {
if (cachedDomains==null) {
cachedDomains = new HashMap();
}
return(cachedDomains);
}*/
public void insertStartData() throws Exception {
//BuilderLogic instance = BuilderLogic.getInstance();
ICDomainHome dHome = (ICDomainHome)getIDOHome(ICDomain.class);
ICDomain domain = dHome.create();
//TODO: Make this possible to set
String domainName = "Default Site";
domain.setName(domainName);
domain.setType(TYPE_DEFAULT);
/*
ICPageHome pageHome = (ICPageHome)getIDOHome(ICPage.class);
ICPage page = pageHome.create();
String rootPageName = domainName;
page.setName(rootPageName);
page.setDefaultPageURI("/");
page.setType(com.idega.builder.data.IBPageBMPBean.PAGE);
page.store();
instance.unlockRegion(page.getPrimaryKey().toString(),"-1",null);
ICPage page2 = pageHome.create();
page2.setName("Default Template");
page2.setType(com.idega.builder.data.IBPageBMPBean.TEMPLATE);
page2.store();
instance.unlockRegion(page2.getPageKey(),"-1",null);
page.setTemplateKey(page2.getPageKey());
page.store();
domain.setIBPage(page);
domain.setStartTemplate(page2);
domain.store();
instance.setTemplateId(page.getPrimaryKey().toString(),page2.getPrimaryKey().toString());
instance.getIBXMLPage(page2.getPrimaryKey().toString()).addPageUsingThisTemplate(page.getPrimaryKey().toString());
*/
domain.store();
}
public String getEntityName() {
return(tableName);
}
public static String getColumnDomainName() {
return(domain_name);
}
public static String getColumnURL() {
return(domain_url);
}
public static String getColumnStartPage() {
return(start_page);
}
public static String getColumnStartTemplate() {
return(start_template);
}
public ICPage getStartPage() {
return((ICPage)getColumnValue(getColumnStartPage()));
}
public int getStartPageID() {
return(getIntColumnValue(getColumnStartPage()));
}
public ICPage getStartTemplate() {
return((ICPage)getColumnValue(getColumnStartTemplate()));
}
public int getStartTemplateID() {
return(getIntColumnValue(getColumnStartTemplate()));
}
// public Group getGroup() {
// return((Group)getColumnValue(COLUMNNAME_GROUP_ID));
// }
//
// public int getGroupID() {
// return(getIntColumnValue(COLUMNNAME_GROUP_ID));
// }
// thomas is asking: why are there two methods (getName and getDomainName) for the same attribute?
public String getName() {
return(getDomainName());
}
public void setName(String name) {
setColumn(getColumnDomainName(),name);
}
public String getDomainName() {
return(getStringColumnValue(getColumnDomainName()));
}
public void setDomainName(String domainName){
setColumn(getColumnDomainName(),domainName);
}
public String getURL() {
return(getStringColumnValue(getColumnURL()));
}
public void setURL(String url){
setColumn(getColumnURL(),url);
}
public Collection getTopLevelGroupsUnderDomain() throws IDORelationshipException, RemoteException, FinderException{
Collection relations = ((GroupDomainRelationHome)IDOLookup.getHome(GroupDomainRelation.class)).findGroupsRelationshipsUnderDomainByRelationshipType(this.getID(),GroupDomainRelationTypeBMPBean.RELATION_TYPE_TOP_NODE);
//TODO do this in one sql command like in groupbmpbean and grouprelation
Iterator iter = relations.iterator();
Collection groups = new Vector();
while (iter.hasNext()) {
GroupDomainRelation item = (GroupDomainRelation)iter.next();
groups.add(item.getRelatedGroup());
}
return groups;
}
public void setIBPage(ICPage page) {
setColumn(getColumnStartPage(),page);
}
public void setStartTemplate(ICPage template) {
setColumn(getColumnStartTemplate(),template);
}
// public void setGroup(Group group) {
// setColumn(COLUMNNAME_GROUP_ID,group);
// }
public void setServerName(String serverName){
setColumn(COLUMNNAME_SERVER_NAME,serverName);
}
public String getServerName(){
return getStringColumnValue(COLUMNNAME_SERVER_NAME);
}
public void setServerPort(int serverPort){
setColumn(COLUMNNAME_SERVER_PORT,serverPort);
}
public int getServerPort(){
return getIntColumnValue(COLUMNNAME_SERVER_PORT);
}
public void setServerContextPath(String serverContextPath){
setColumn(COLUMNNAME_SERVER_CONTEXT_PATH,serverContextPath);
}
public String getServerContextPath(){
return getStringColumnValue(COLUMNNAME_SERVER_CONTEXT_PATH);
}
public void setServerProtocol(String serverProtocol){
setColumn(COLUMNNAME_SERVER_PROTOCOL,serverProtocol);
}
public String getServerProtocol(){
return getStringColumnValue(COLUMNNAME_SERVER_PROTOCOL);
}
public void setDefaultLocale(Locale locale){
if(locale!=null){
setDefaultLocaleString(locale.toString());
}
}
public void setDefaultLocaleString(String serverName){
setColumn(COLUMNNAME_DEFAULT_LOCALE,serverName);
}
public String getDefaultLocaleString(){
return getStringColumnValue(COLUMNNAME_DEFAULT_LOCALE);
}
public Locale getDefaultLocale(){
String localeString = getDefaultLocaleString();
if(localeString!=null){
return LocaleUtil.getLocale(localeString);
}
return null;
}
public Collection ejbFindAllDomains() throws FinderException {
String sql = "select * from " + getTableName();
return super.idoFindPKsBySQL(sql);
}
public Collection ejbFindAllDomainsByServerName(String serverName) throws FinderException{
IDOQuery query = idoQueryGetSelect();
query.appendWhereEqualsWithSingleQuotes(COLUMNNAME_SERVER_NAME,serverName);
System.out.println(query.toString());
return idoFindPKsByQuery(query);
}
public String getURLWithoutLastSlash(){
String url = getURL();
if(url!=null){
if(url.endsWith("/")){
return url.substring(0,url.length()-1);
}
return url;
}
else{
return null;
}
}
/**
* Get the UUID for the domain:
*/
public String getUniqueId(){
return super.getUniqueId();
}
/**
* <p>
* Finds the first domain (Default Domain) in the table.
* </p>
* @return
*/
public Object ejbFindFirstDomain() throws FinderException{
SelectQuery query = idoSelectPKQuery();
Table t = new Table(this);
query.addOrder(t,getIDColumnName(),true);
return idoFindOnePKByQuery(query);
}
/**
* <p>
* Finds the domain marked as default (Default Domain) in the table.
* </p>
* @return
*/
public Object ejbFindDefaultDomain() throws FinderException{
SelectQuery query = idoSelectPKQuery();
Table t = new Table(this);
query.addCriteria(new MatchCriteria(t,COLUMNNAME_TYPE,MatchCriteria.EQUALS,TYPE_DEFAULT));
return idoFindOnePKByQuery(query);
}
/**
* <p>
* Finds the domain that has the given serverName if any, else it gets the one marked as default (Default Domain) in the table.
* </p>
* @return
*/
public Object ejbFindDomainByServernameOrDefault(String serverName) throws FinderException{
try{
SelectQuery query = idoSelectPKQuery();
Table t = new Table(this);
Criteria serverNameCriteria = new MatchCriteria(t,COLUMNNAME_SERVER_NAME,MatchCriteria.EQUALS,serverName);
Criteria aliasesCriteria = new MatchCriteria(t,COLUMNNAME_SERVER_ALIASES,MatchCriteria.LIKE,serverName);
OR orCriteria = new OR(serverNameCriteria,aliasesCriteria);
query.addCriteria(orCriteria);
return idoFindOnePKByQuery(query);
}
catch(FinderException fe){
logWarning("Couldn't find domain record for ServerName : '"+ serverName+"' Falling back on Default domain");
return ejbFindDefaultDomain();
}
}
public String getType() {
return getStringColumnValue(COLUMNNAME_TYPE);
}
public void setType(String type) {
setColumn(COLUMNNAME_TYPE, type);
}
public String getServerAliases() {
return getStringColumnValue(COLUMNNAME_SERVER_ALIASES);
}
public void setServerAliases(String aliases) {
setColumn(COLUMNNAME_SERVER_ALIASES, aliases);
}
public boolean isDefaultDomain() {
String type = getType();
if(type!=null&&type.equals(TYPE_DEFAULT)){
return true;
}
return false;
}
}