use of org.bigbluebutton.webminer.web.model.IndexingContentSource in project bigbluebutton by bigbluebutton.
the class CourseIndexingController method onSubmit.
/*
* (non-Javadoc)
*
* @see
* org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(javax
* .servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
* java.lang.Object, org.springframework.validation.BindException)
*/
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) {
// Get url of lecture.xml
IndexingContentSource contentSourceCommand = (IndexingContentSource) command;
String lectureXMLURL = contentSourceCommand.getLectureURL();
System.out.println("in indexing");
// location.
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
org.w3c.dom.Document document = parser.parse(lectureXMLURL);
String slideBaseURL = contentSourceCommand.getSlideBaseURL();
List slideListResult = slideExpression.evaluateAsNodeList(document);
List playTimeNodeList = slidePlayTimeExpression.evaluateAsNodeList(document);
Map<String, String> slideTimeMap = new HashMap<String, String>();
for (int i = 0; i < playTimeNodeList.size(); i++) {
Node slideNode = (Node) playTimeNodeList.get(i);
String slideTime = slideNode.getAttributes().getNamedItem("time").getNodeValue();
String slideIndex = slideNode.getTextContent();
if (slideTimeMap.get(slideIndex) != null) {
// if a slide has been played multiple times, appending all
// times or only record the first play time
String value = slideTimeMap.get(slideIndex) + "||" + slideTime;
slideTimeMap.put(slideIndex, value);
} else {
slideTimeMap.put(slideIndex, slideTime);
}
if (logger.isInfoEnabled()) {
logger.info("slide index = " + slideIndex + " " + slideTime);
logger.info("---Slide play time ---" + (String) slideTimeMap.get(slideIndex));
}
}
// Map <String, String> slideTimeMap = new HashMap<String,
// String>();
ArrayList<String> fileURLs = new ArrayList();
String fileLocation = null;
synchronized (Index.getInstance()) {
Index.getInstance().startIndex(lectureXMLURL);
for (int i = 0; i < slideListResult.size(); i++) {
Node node = (Node) slideListResult.get(i);
String swfName = node.getNodeValue();
fileLocation = slideBaseURL + swfName;
fileURLs.add(i, fileLocation);
Map attrs = new HashMap();
// attrs.put("title", swfName);
attrs.put("fileName", swfName);
attrs.put("uid", lectureXMLURL);
String idxToKey = (new Integer(i + 1)).toString();
if (logger.isDebugEnabled()) {
logger.debug("idxToKey" + idxToKey + " resultsize=" + slideListResult.size() + "---Slide play time ---" + (String) slideTimeMap.get(idxToKey) + " summary = " + contentSourceCommand.getSummary());
}
// show the slide time
if (slideTimeMap.get(idxToKey) != null) {
attrs.put("slideTime", "Slide " + idxToKey + ": played at " + (String) slideTimeMap.get(idxToKey));
}
attrs.put("summary", contentSourceCommand.getSummary());
Index.getInstance().addIndex(fileLocation, attrs);
}
Index.getInstance().finishIndex();
}
} catch (Exception e) {
System.out.println("-----------------exception -----------------------");
Map<String, Object> model = new HashMap<String, Object>();
model.put("generalError", "Please check the URL of files required by indexing");
model.put("sourceContentURL", contentSourceCommand);
return new ModelAndView(this.getFormView(), model);
}
return new ModelAndView(this.getSuccessView(), errors.getModel());
}
Aggregations