package org.openedit.entermedia;
import org.openedit.data.Searcher;
import org.openedit.data.SearcherManager;
import org.openedit.event.WebEvent;
import org.openedit.event.WebEventHandler;
import com.openedit.hittracker.HitTracker;
import com.openedit.users.User;
import com.openedit.util.PathUtilities;
public class AssetStatsManager
{
protected WebEventHandler fieldMediaEventHandler;
protected SearcherManager fieldSearcherManager;
// protected Map fieldViewCache;
// protected long fieldViewExpireTime;
//
// public long getViewExpireTime()
// {
// return fieldViewExpireTime;
// }
//
// public void setViewExpireTime(long inViewExpireTime)
// {
// fieldViewExpireTime = inViewExpireTime;
// }
public SearcherManager getSearcherManager()
{
return fieldSearcherManager;
}
public void setSearcherManager(SearcherManager inSearcherManager)
{
fieldSearcherManager = inSearcherManager;
}
public WebEventHandler getMediaEventHandler()
{
return fieldMediaEventHandler;
}
public void setMediaEventHandler(WebEventHandler inMediaEventHandler)
{
fieldMediaEventHandler = inMediaEventHandler;
}
public void logAssetDownload(String inCatalogId, String inSourcePath, String inResult, User inUser)
{
WebEvent change = new WebEvent();
change.setOperation("asset/download");
change.setSearchType("asset");
change.setProperty("filename", PathUtilities.extractFileName(inSourcePath ));
change.setSourcePath(inSourcePath);
change.setUser(inUser);
change.setProperty("result", inResult);
change.setCatalogId(inCatalogId);
getMediaEventHandler().eventFired(change);
}
public void logAssetPreview(Asset inAsset, User inUser)
{
WebEvent change = new WebEvent();
change.setOperation("asset/preview");
change.setSearchType("asset");
change.setSourcePath(inAsset.getSourcePath());
change.setUser(inUser);
change.setCatalogId(inAsset.getCatalogId());
change.setProperty("assetid",inAsset.getId());
String views = inAsset.getProperty("assetviews");
if( views != null )
{
long assetviews = Long.parseLong(views);
assetviews++;
inAsset.setProperty("assetviews",String.valueOf(assetviews)); //this will be overridden
}
getMediaEventHandler().eventFired(change);
}
public long getViewsForAsset(Asset inAsset)
{
//check with the log files and cache the results?
if( inAsset == null || inAsset.getCatalogId() == null)
{
return 0L;
}
if(inAsset.getId().startsWith("multi")){
return 0L;
}
long assetexpire = 0L;
String expires = inAsset.getProperty("assetviewsexpires");
if( expires != null )
{
assetexpire = Long.parseLong(expires);
}
long now = System.currentTimeMillis();
if( assetexpire == 0 || assetexpire > now)
{
assetexpire = now + 1000*60*60; //once an hour
Searcher logsearcher = getSearcherManager().getSearcher(inAsset.getCatalogId(), "assetpreviewLog");
HitTracker all = logsearcher.fieldSearch("sourcepath", inAsset.getSourcePath());
Long views = Long.valueOf(all.size());
inAsset.setProperty("assetviews",String.valueOf(views));
inAsset.setProperty("assetviewsexpires",String.valueOf(assetexpire));
return views.longValue();
}
else
{
String views = inAsset.getProperty("assetviews");
if( views != null )
{
return Long.parseLong(views);
}
return -1;
}
}
protected void checkAssetSave(Asset inAsset, long newcount)
{
//save it to the asset index if it has not been updated within 10 hits or 24 hours?
long oldcount = 0;
String views = inAsset.get("assetviews");
if( views != null)
{
oldcount = Long.parseLong(views);
}
inAsset.setProperty("assetviews",String.valueOf(newcount));
if( newcount - 10 > oldcount)
{
WebEvent change = new WebEvent();
change.setOperation("assetsave");
change.setSearchType("asset");
change.setSourcePath(inAsset.getSourcePath());
change.setCatalogId(inAsset.getCatalogId());
getMediaEventHandler().eventFired(change);
}
}
}