package org.netevolved.tincan; import java.util.Iterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.entermediadb.events.PathEventManager; import org.ijsolutions.testbench.TestBench; import org.openedit.Data; import org.openedit.ModuleManager; import org.openedit.WebPageRequest; import org.openedit.data.Searcher; import org.openedit.data.SearcherManager; import org.openedit.event.WebEvent; import org.openedit.event.WebEventListener; public class TinCanLogger implements WebEventListener { private static final Log log = LogFactory.getLog(TinCanLogger.class); protected ModuleManager fieldModuleManager; protected TinCan fieldTinCan; protected SearcherManager getSearcherManager() { return (SearcherManager) getModuleManager().getBean("searcherManager"); } public ModuleManager getModuleManager() { return fieldModuleManager; } public void setModuleManager(ModuleManager inModuleManager) { fieldModuleManager = inModuleManager; } public void logEvent(String inCatalogId, String inOperation, String inSearchType, Data inData, String inUser) { } public void eventFired(WebEvent inEvent) { TestBench bench = (TestBench) getModuleManager().getBean(inEvent.getCatalogId(), "testBench"); String setting = bench.getSetting("lrs-endpoint"); if (setting == null) { log.info("LRS not configured"); return; } boolean oktoprocess = prepareEvent(inEvent); if (!oktoprocess) { return; } String runpath = "/" + inEvent.getCatalogId() + "/events/tincan/recordexperience.html"; PathEventManager manager = (PathEventManager) getModuleManager().getBean(inEvent.getCatalogId(), "pathEventManager"); // log.info("path event running" + runpath); // log.info("web event called : " + inRunpath); WebPageRequest request = manager.getRequestUtils().createPageRequest(runpath, inEvent.getUser()); for (Iterator iterator = inEvent.getProperties().keySet().iterator(); iterator.hasNext();) { String key = (String) iterator.next(); Object value = inEvent.getValue(key); if (value instanceof String) { request.setRequestParameter(key, (String) value); } request.putPageValue(key, value); } request.setRequestParameter("catalogid", inEvent.getCatalogId()); request.putPageValue("webevent", inEvent); manager.runPathEvent(runpath, request); } protected boolean prepareEvent(WebEvent inEvent) { boolean oktoprocess = false; TestBench bench = (TestBench) getModuleManager().getBean(inEvent.getCatalogId(), "testBench"); Searcher mapping = bench.getSearcher("tincanmappings"); Data map = mapping.query().match("operation", inEvent.getOperation()).searchOne(); TinCanIDAssistant assistant = bench.getTinCanAssistant(); if (map != null) { if (map.get("verbid") == null) { log.info("No verb found for " + inEvent.getSearchType() + "/" + inEvent.getOperation()); return false; } oktoprocess = true; inEvent.setValue("verb", map.getValue("verbid")); inEvent.setValue("verb_display", inEvent.getOperation()); } else { log.info("No record found for " + inEvent.getSearchType() + "/" + inEvent.getOperation()); Data newrow = mapping.createNewData(); newrow.setValue("operation", inEvent.getOperation()); newrow.setValue("searchtype", inEvent.getSearchType()); mapping.saveData(newrow); } String searchtype = inEvent.getSearchType(); String dataid = inEvent.get("dataid"); if (dataid == null && "asset".equals(searchtype)) { dataid = inEvent.get("assetid"); } if (inEvent.getSource() == null && dataid != null) { Data data = bench.getData(searchtype, dataid); if(data != null) { inEvent.setSource(data); inEvent.setName(data.getName()); inEvent.setProperty("name", data.getName()); } } else { if ("asset".equals(searchtype)) { if (inEvent.getSourcePath() != null) { Data data = bench.getMediaArchive().getAssetBySourcePath(inEvent.getSourcePath()); if (data != null) { inEvent.setSource(data); inEvent.setName(data.getName()); inEvent.setProperty("name", data.getName()); } } } } if (inEvent.getSource() != null) { if (inEvent.getSource() instanceof Data) { inEvent.setProperty("name", ((Data) inEvent.getSource()).getName()); } } inEvent.setProperty("activity", assistant.createEventUri(inEvent)); return oktoprocess; } protected TinCan getTinCan(String inCatalogId) { return (TinCan) getModuleManager().getBean(inCatalogId, "tinCan"); } }