package org.openedit.entermedia.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openedit.Data;
import org.openedit.data.BaseSearcher;
import org.openedit.xml.XmlArchive;
import org.openedit.xml.XmlFile;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.hittracker.HitTracker;
import com.openedit.hittracker.SearchQuery;
import com.openedit.hittracker.Term;
import com.openedit.users.User;
import com.openedit.users.UserManager;
import com.openedit.util.LDAP;
public class LdapSearcher extends BaseSearcher
{
protected Log log = LogFactory.getLog(getClass());
protected XmlArchive fieldXmlArchive;
protected String fieldDomain;
protected Map fieldServers;
protected UserManager fieldUserManager;
public UserManager getUserManager()
{
return fieldUserManager;
}
public void setUserManager(UserManager inUserManager)
{
fieldUserManager = inUserManager;
}
protected Map getServers()
{
if (fieldServers == null)
{
fieldServers = new HashMap();
}
return fieldServers;
}
protected LDAP getServer()
{
LDAP server = (LDAP)getServers().get("default"); //TODO: Support named config
if (server == null)
{
server = new LDAP();
XmlFile ldapconfig = getXmlArchive().getXml("/" + getCatalogId() + "/configuration/ldap.xml");
server.setDomain(ldapconfig.get("domain"));
server.setMaxLdapResults(Integer.parseInt(ldapconfig.get("maxldapresults")));
server.setServerName(ldapconfig.get("servername"));
String username = ldapconfig.get("username");
if( username != null)
{
User user = getUserManager().getUser(username);
String password = getUserManager().decryptPassword(user);
server.authenticate(user,password);
if( !server.connect() )
{
throw new OpenEditException("Could not connect as user " + username);
}
}
getServers().put("default", server);
}
return server;
}
public String getDomain()
{
return fieldDomain;
}
public void clearIndex()
{
// TODO Auto-generated method stub
}
public SearchQuery createSearchQuery()
{
SearchQuery query = new SearchQuery();
return query;
}
public void delete(Data inData, User inUser)
{
// TODO Auto-generated method stub
}
public HitTracker getAllHits(WebPageRequest inReq)
{
// TODO Auto-generated method stub
return null;
}
public String getIndexId()
{
// TODO Auto-generated method stub
return null;
}
public void reIndexAll() throws OpenEditException
{
// TODO Auto-generated method stub
}
public void saveAllData(Collection inAll, User inUser)
{
// TODO Auto-generated method stub
}
public void saveData(Data inData, User inUser)
{
// TODO Auto-generated method stub
}
public HitTracker search(SearchQuery inQuery)
{
LDAP ldap = getServer();
Term term = (Term)inQuery.getTerms().get(0);
String value = term.getValue();
try
{
HitTracker results = ldap.search(term.getDetail().getId(), "substring", value); //TODO: lookup operation
return results;
}
catch(Exception e)
{
log.error("Could not run LDAP search", e);
}
return null;
}
public XmlArchive getXmlArchive()
{
return fieldXmlArchive;
}
public void setXmlArchive(XmlArchive inXmlArchive)
{
fieldXmlArchive = inXmlArchive;
}
public void deleteAll(User inUser)
{
// TODO Auto-generated method stub
}
}