/* * Created on Jul 19, 2006 */ package org.openedit.entermedia.modules; import java.util.Iterator; import java.util.List; import org.entermedia.location.GeoCoder; import org.entermedia.location.Position; import org.openedit.Data; import org.openedit.data.Searcher; import org.openedit.entermedia.Category; import org.openedit.entermedia.MediaArchive; import org.openedit.profile.UserProfile; import com.openedit.WebPageRequest; import com.openedit.hittracker.HitTracker; import com.openedit.hittracker.SearchQuery; //Use DataEditModule for searching asset data public class MediaSearchModule extends BaseMediaModule { protected GeoCoder fieldGeoCoder; public GeoCoder getGeoCoder() { if (fieldGeoCoder == null) { fieldGeoCoder = new GeoCoder(); } return fieldGeoCoder; } public void setGeoCoder(GeoCoder fieldGeoCoder) { this.fieldGeoCoder = fieldGeoCoder; } public void searchCategories(WebPageRequest inPageRequest) throws Exception { MediaArchive archive = getMediaArchive(inPageRequest); Category category = archive.getCategory(inPageRequest); inPageRequest.putPageValue("category",category); HitTracker tracker = archive.getAssetSearcher().searchCategories(inPageRequest, category); if( tracker != null) { // SearchQuery query = tracker.getSearchQuery(); // if( query.getTerms().size() == 1) // { // Term term = (Term)query.getTerms().get(0); // if (term.getDetail().getId().equals("category")) // { // //TODO: Seems like this could be done within the searcher or something tracker.setDataSource(archive.getCatalogId() + "/categories/" + category.getId()); } UserProfile prefs = (UserProfile)inPageRequest.getUserProfile(); if( prefs != null) { prefs.setProperty("lastcatalog", archive.getCatalogId()); //prefs.save(); } } public void searchExactCategories(WebPageRequest inPageRequest) throws Exception { MediaArchive archive = getMediaArchive(inPageRequest); Category category = archive.getCategory(inPageRequest); archive.getAssetSearcher().searchExactCategories(inPageRequest, category); } public void searchFavories(WebPageRequest inPageRequest) throws Exception { String userid = inPageRequest.findValue("userid"); if(userid == null){ return; } MediaArchive archive = getMediaArchive(inPageRequest); Searcher searcher = archive.getSearcherManager().getSearcher(archive.getCatalogId(), "assetvotes"); SearchQuery query = searcher.createSearchQuery(); query.addExact("username", userid); query.addSortBy("timeDown"); HitTracker assets = searcher.cachedSearch(inPageRequest, query); if( assets.size() > 0) { //Now do a big OR statement SearchQuery aquery = archive.getAssetSearcher().createSearchQuery(); aquery.setSortBy(inPageRequest.findValue("sortby")); SearchQuery orquery = archive.getAssetSearcher().createSearchQuery(); orquery.setAndTogether(false); for (Iterator iterator = assets.getPageOfHits().iterator(); iterator.hasNext();) { Data data = (Data) iterator.next(); String assetid = data.get("assetid"); if(assetid != null){ orquery.addExact("id", data.get("assetid")); } } aquery.addChildQuery(orquery); HitTracker tracker = archive.getAssetSearcher().cachedSearch(inPageRequest, aquery); } } public void searchUploads(WebPageRequest inPageRequest) throws Exception { String userid = inPageRequest.findValue("userid"); MediaArchive archive = getMediaArchive(inPageRequest); SearchQuery aquery = archive.getAssetSearcher().createSearchQuery(); aquery.setSortBy(inPageRequest.findValue("sortby")); aquery.addExact("owner", userid); archive.getAssetSearcher().cachedSearch(inPageRequest, aquery); } public void rangeSearch(WebPageRequest inReq) throws Exception { //This does a search in a square for the range (+/- the range in both directions from the point MediaArchive archive = getMediaArchive(inReq); String target = inReq.getRequestParameter("target"); String rangeString = inReq.findValue("range"); String detailid = inReq.findValue("field"); double range = Double.parseDouble(rangeString); range = range / 157253.2964;//convert to decimal degrees (FROM Meters) List positions = getGeoCoder().getPositions(target); if(positions != null && positions.size() > 0){ Position p = (Position)positions.get(0); Double latitude = p.getLatitude(); Double longitude = p.getLongitude(); Double maxlat = latitude + range; Double minlat = latitude - range; Double maxlong = longitude + range; Double minlong = longitude - range; Searcher searcher = archive.getAssetSearcher(); SearchQuery query = searcher.addStandardSearchTerms(inReq); if(query == null){ query = searcher.createSearchQuery(); } query.addBetween(detailid + "_lat_sortable", minlat, maxlat); query.addBetween(detailid + "_lng_sortable", minlong, maxlong ); searcher.cachedSearch(inReq, query); } } public void findMappableAssets(WebPageRequest inReq){ String detailid = inReq.findValue("detailid"); MediaArchive archive = getMediaArchive(inReq); SearchQuery aquery = archive.getAssetSearcher().createSearchQuery(); aquery.setSortBy(inReq.findValue("sortby")); aquery.addExact(detailid + "_available", "true"); archive.getAssetSearcher().cachedSearch(inReq, aquery); } }