package com.openedit;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Element;
import org.entermedia.cache.CacheManager;
import org.openedit.xml.XmlArchive;
import org.openedit.xml.XmlFile;
import com.openedit.page.Page;
import com.openedit.page.manage.PageManager;
public class BeanNameLoader
{
private static final Log log = LogFactory.getLog(BeanNameLoader.class);
protected PageManager fieldPageManager;
protected CacheManager fieldCacheManager;
protected XmlArchive fieldXmlArchive;
public CacheManager getCacheManager()
{
return fieldCacheManager;
}
public void setCacheManager(CacheManager inCacheManager)
{
fieldCacheManager = inCacheManager;
}
public XmlArchive getXmlArchive()
{
return fieldXmlArchive;
}
public void setXmlArchive(XmlArchive inXmlArchive)
{
fieldXmlArchive = inXmlArchive;
}
public PageManager getPageManager()
{
return fieldPageManager;
}
public void setPageManager(PageManager inPageManager)
{
fieldPageManager = inPageManager;
}
public String findName(String inCatalogId, String inId)
{
String cacheid = inCatalogId + inId;
String hit = (String)getCacheManager().get("beanNameloader", cacheid);
if (hit != null)
{
return hit;
}
String name = legacyLoad(inCatalogId,inId);
if( name == null)
{
name = inId;
}
getCacheManager().put("beanNameloader",cacheid, name);
return name;
}
protected void loadChildren(String inName, List<String> children, Element root, boolean noDups)
{
for(String child:children)
{
if(child.endsWith(".xml"))
{
XmlFile settings = getXmlArchive().getXml(child,child,inName);
for (Iterator iterator = settings.getRoot().elementIterator(); iterator
.hasNext();)
{
Element row = (Element) iterator.next();
Element existing = getElementById(root,row.attributeValue("id"));
if( !noDups || existing == null )
{
row.setParent(null);
root.add(row);
}
}
}
}
}
protected Element getElementById(Element root, String inEid)
{
if( inEid == null)
{
return null;
}
for (Iterator iter = root.elementIterator(); iter.hasNext();)
{
Element element = (Element) iter.next();
String id = element.attributeValue("id");
if ( inEid.equals(id))
{
return element;
}
}
return null;
}
protected String legacyLoad(String inCatalogId, String inBeanName)
{
String beanName = null;
String parentlocation = "/" + inCatalogId + "/configuration/beans.xml";
Page page = getPageManager().getPage(parentlocation);
if(!page.exists())
{
page = getPageManager().getPage("/system/configuration/beans.xml");
}
XmlFile file = getXmlArchive().getXml(page.getPath());
Element field = file.getElementById(inBeanName);
if( field != null)
{
//log.info("BEANS FOUND: " + field + ", with bean: " + field.attributeValue("bean"));
beanName = field.attributeValue("bean");
}
else
{
String type = file.getRoot().attributeValue("basedatatype");
if( type == null)
{
type = "lucene";
}
file = getXmlArchive().getXml("/system/configuration/" + type + ".xml");
field = file.getElementById(inBeanName);
if( field != null)
{
//log.info("BEANS FOUND: " + field + ", with bean: " + field.attributeValue("bean"));
beanName = field.attributeValue("bean");
}
}
return beanName;
}
}