/* * Created on Oct 19, 2004 */ package org.openedit.users; import java.io.File; import java.io.FilenameFilter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.lucene.document.Document; import org.apache.lucene.facet.taxonomy.TaxonomyWriter; import org.apache.lucene.index.IndexWriter; import org.openedit.Data; import org.openedit.data.PropertyDetails; import org.openedit.data.lucene.BaseLuceneSearcher; import com.openedit.OpenEditException; import com.openedit.WebPageRequest; import com.openedit.hittracker.HitTracker; import com.openedit.users.BaseGroup; import com.openedit.users.Group; import com.openedit.users.User; import com.openedit.users.UserManager; import com.openedit.util.PathUtilities; /** * @author cburkey * */ public class LuceneGroupSearcher extends BaseLuceneSearcher implements GroupSearcher { private static final Log log = LogFactory.getLog(LuceneGroupSearcher.class); protected UserManager fieldUserManager; public HitTracker getAllHits(WebPageRequest inReq) { return getUserManager().getGroups(); // return new ListHitTracker().setList(getCustomerArchive().) } // public HitTracker findUserNoLucene(String inQuery, int maxNum) throws // UserManagerException // { // ListHitTracker tracker = new ListHitTracker(); // SearchQuery q = new SearchQuery(); // q.addMatches(inQuery); // tracker.setSearchQuery(q); // // // // if ( inQuery == null || inQuery.equalsIgnoreCase("all") || // inQuery.length() == 0) // { // for (Iterator iter = getUserManager().getUsers().getAllHits(); // iter.hasNext() && tracker.getTotal() < maxNum;) // { // String username = (String) iter.next(); // User user = getUserManager().getUser(username); // tracker.add(user); // } // return tracker; // } // inQuery = inQuery.toLowerCase(); // for (Iterator iter = getUserManager().getUsers().getAllHits(); // iter.hasNext();) // { // String username = (String) iter.next(); // if( matches(username,inQuery) ) // { // User user = getUserManager().getUser(username); // tracker.add(user); // } // else if( maxNum < 1001) // { // //check email // User user = getUserManager().getUser(username); // for (Iterator iterator = user.getProperties().values().iterator(); // iterator.hasNext();) // { // String val = (String) iterator.next(); // if( matches(val,inQuery ) ) // { // tracker.add(user); // } // } // // } // if ( tracker.getTotal() >= maxNum) // { // break; // } // } // return tracker; // } // protected boolean matches(String inText, String inQuery) // { // if ( inText != null) // { // if (PathUtilities.match(inText, inQuery) ) // { // return true; // } // } // return false; // } public UserManager getUserManager() { return fieldUserManager; } public void setUserManager(UserManager inUserManager) { fieldUserManager = inUserManager; } public Object searchById(String inId) { return getGroup(inId); } public void reIndexAll(IndexWriter writer, TaxonomyWriter inWriter) { log.info("Reindex of customer groups directory"); try { //writer.setMergeFactor(50); // FIXME: Move this to XmlCustomerArchive, e.g. getAllUserNames() File groupsDirectory = new File(getRootDirectory(), "/WEB-INF/data/system/groups"); if( !groupsDirectory.exists()) { groupsDirectory = new File(getRootDirectory(), "/WEB-INF/groups"); } File[] groupsxml = groupsDirectory.listFiles(new FilenameFilter() { public boolean accept(File inDir, String inName) { if (inName.endsWith(".xml")) { return true; } return false; } }); if( groupsxml != null) { PropertyDetails details = getPropertyDetailsArchive().getPropertyDetails(getSearchType()); for (int i = 0; i < groupsxml.length; i++) { Document doc = new Document(); File xconf = groupsxml[i]; String groupid = PathUtilities.extractPageName(xconf.getPath()); Group group = getUserManager().getGroup(groupid); updateIndex( group, doc, details); writer.addDocument(doc); } } //writer.optimize(); } catch (Exception e) { // TODO Auto-generated catch block throw new OpenEditException(e); } } @Override public Data createNewData() { return new BaseGroup(); } public Group getGroup(String inGroupId) { Group group = getUserManager().getGroup(inGroupId); if (group == null) { log.error("Index is out of date, group " + inGroupId + " has since been deleted"); } return group; } public void saveData(Data inData, User inUser) { getUserManager().saveGroup((Group) inData); updateIndex((Group) inData); } public void setCatalogId(String inCatalogId) { if( !"system".equals(inCatalogId) ) { throw new OpenEditException("group searcher should only be a system level not " + inCatalogId ); } super.setCatalogId(inCatalogId); } public void deleteData(Data inData) { getUserManager().deleteGroup((Group)inData); } }