*/
@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");
// Create DOM object for lecture.xml to extract presentation slide
// 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);
// Index index = Index.getInstance();
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());
}
// Some slides in the file list may never be played, don't
// 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();
}