package com.idega.idegaweb;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.core.builder.data.ICDomain;
import com.idega.core.builder.data.ICDomainHome;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
/**
* Title: A default implementation of IWApplicationContext
* Description:
* Copyright: Copyright (c) 2002
* Company: idega
* @author <a href="tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
public class IWApplicationContextImpl implements IWApplicationContext {
private final static String IWAPP_CURRENT_DOMAIN_ID = "iw_current_domain_id";
private IWMainApplication iwma;
private HashMap domainMap = new HashMap();
ICDomain domain;
private boolean defaultDomainIsInHashmap = false;
protected IWApplicationContextImpl(IWMainApplication superApp){
this.iwma=superApp;
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getIWMainApplication()
*/
public IWMainApplication getIWMainApplication() {
return this.iwma;
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getApplicationSettings()
*/
public IWMainApplicationSettings getApplicationSettings() {
return this.iwma.getSettings();
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getSystemProperties()
*/
public IWSystemProperties getSystemProperties() {
return this.iwma.getSystemProperties();
}
/**
* @see com.idega.idegaweb.IWApplicationContext#setApplicationAttribute(String, Object)
*/
public void setApplicationAttribute(
String attributeName,
Object attributeValue) {
this.iwma.setAttribute(attributeName,attributeValue);
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getApplicationAttribute(String)
*/
public Object getApplicationAttribute(String attributeName) {
return this.iwma.getAttribute(attributeName);
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getApplicationAttribute(String,Object)
*/
public Object getApplicationAttribute(String attributeName, Object defaultObjectToReturnIfValueIsNull) {
return this.iwma.getAttribute(attributeName,defaultObjectToReturnIfValueIsNull);
}
/**
* @see com.idega.idegaweb.IWApplicationContext#removeApplicationAttribute(String)
*/
public void removeApplicationAttribute(String attributeName) {
this.iwma.removeAttribute(attributeName);
}
/**
* @see com.idega.idegaweb.IWApplicationContext#getDomain()
*/
public ICDomain getDomain(){
return getDomainByServerName(null);
}
public ICDomain getDomainByServerName(String serverName) {
boolean cachDefaultDomainForThisServerURL = false;
try {
if(serverName!=null && !"".equals(serverName)){
ICDomain toReturn = (ICDomain)this.domainMap.get(serverName);
if(toReturn==null){
ICDomainHome domainHome = (ICDomainHome)IDOLookup.getHome(ICDomain.class);
Collection coll = domainHome.findAllDomainsByServerName(serverName);
Iterator iter = coll.iterator();
if (iter.hasNext()) {
toReturn = (ICDomain)iter.next();
this.domainMap.put(serverName,toReturn);
return toReturn;
} else {
System.out.println("Couldn't find domain record for ServerName : "+ serverName);
cachDefaultDomainForThisServerURL=true;
}
} else {
return toReturn;
}
}
} catch (IDOLookupException e1) {
e1.printStackTrace();
} catch (FinderException e1) {
//e1.printStackTrace();
System.out.println("Couldn't find domain record for ServerName : "+ serverName);
cachDefaultDomainForThisServerURL=true;
}
try {
String id = (String) this.getApplicationAttribute(IWAPP_CURRENT_DOMAIN_ID);
int domainID = 1;
if (id != null) {
try {
domainID = Integer.parseInt(id);
} catch (NumberFormatException nfe) {
}
}
if(this.domain==null){
ICDomainHome domainHome = (ICDomainHome)IDOLookup.getHome(ICDomain.class);
this.domain = domainHome.findByPrimaryKey(domainID);
}
if(cachDefaultDomainForThisServerURL){
this.domainMap.put(serverName,this.domain);
}
return this.domain;
} catch (Exception e) {
//e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
public boolean equals(Object o){
if(o instanceof IWApplicationContext){
IWApplicationContext iwac = (IWApplicationContext)o;
return (this.getDomain().equals(iwac.getDomain()));
}
return false;
}
}