/*
* $Id: IBDomainBMPBean.java,v 1.18 2005/08/15 14:18:11 thomas Exp $
*
* Copyright (C) 2001 Idega hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*
*/
package com.idega.builder.data;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.builder.business.BuilderLogic;
import com.idega.core.builder.data.ICDomain;
import com.idega.core.builder.data.ICDomainHome;
import com.idega.core.builder.data.ICPage;
import com.idega.core.builder.data.ICPageHome;
import com.idega.data.GenericEntity;
import com.idega.data.IDOLookup;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.user.data.GroupDomainRelation;
import com.idega.user.data.GroupDomainRelationHome;
import com.idega.user.data.GroupDomainRelationTypeBMPBean;
/**
* @author <a href="tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
public class IBDomainBMPBean extends GenericEntity implements ICDomain {
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";
private static Map cachedDomains;
public IBDomainBMPBean() {
super();
}
private IBDomainBMPBean(int id) throws java.sql.SQLException {
super(id);
}
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();
}
public static ICDomain getDomain(int id)throws SQLException {
ICDomain theReturn;
theReturn = (ICDomain)getDomainsMap().get(new Integer(id));
if (theReturn == null) {
theReturn = ((ICDomainHome)IDOLookup.getHomeLegacy(ICDomain.class)).findByPrimaryKeyLegacy(id);
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);
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());
}
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 name) {
setName(name);
}
public String getURL() {
return(getStringColumnValue(getColumnURL()));
}
public void setURL(String url) {
setStringColumn(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 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);
}
/**
* Get the UUID for the domain:
*/
public String getUniqueId(){
return super.getUniqueId();
}
}