package edu.asu.spring.quadriga.web.search; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import edu.asu.spring.quadriga.conceptpower.IConceptpowerConnector; import edu.asu.spring.quadriga.domain.enums.ETextAccessibility; import edu.asu.spring.quadriga.domain.impl.ConceptpowerReply; import edu.asu.spring.quadriga.domain.impl.ConceptpowerReply.ConceptEntry; import edu.asu.spring.quadriga.domain.impl.networks.CreationEvent; import edu.asu.spring.quadriga.domain.impl.networks.ElementEventsType; import edu.asu.spring.quadriga.domain.workspace.ITextFile; import edu.asu.spring.quadriga.exceptions.FileStorageException; import edu.asu.spring.quadriga.exceptions.QuadrigaException; import edu.asu.spring.quadriga.qstore.IMarshallingService; import edu.asu.spring.quadriga.qstore.IQStoreConnector; import edu.asu.spring.quadriga.service.textfile.ITextFileManager; import edu.asu.spring.quadriga.web.util.TextHelper; @Controller public class PublicTextViewController { @Autowired private ITextFileManager tfManager; @Autowired private IQStoreConnector qstoreConnector; @Autowired private IMarshallingService marshallingService; @Autowired private IConceptpowerConnector conceptpowerConnector; @Autowired private TextHelper textHelper; private static final Logger logger = LoggerFactory.getLogger(PublicTextViewController.class); @RequestMapping(value = "public/text/view", produces = "text/plain;charset=UTF-8") public ResponseEntity<String> viewTextfile(@RequestParam("txtid") String txtId, @RequestParam(value = "conceptUri", defaultValue="") String conceptUri, HttpServletResponse response, HttpServletRequest request) throws QuadrigaException, JAXBException { try { ITextFile textFile = tfManager.getTextFile(txtId); if (textFile.getAccessibility() == ETextAccessibility.PUBLIC) { tfManager.loadFile(textFile); String contents = textFile.getFileContent(); if (!conceptUri.isEmpty()) { ConceptpowerReply reply = conceptpowerConnector.getById(conceptUri); List<ConceptEntry> entries = reply.getConceptEntry(); ConceptEntry entry = null; if (entries != null && !entries.isEmpty()) { entry = entries.get(0); } // get appellations with original text URI String result = qstoreConnector.getAppellationEventsByConceptAndText(conceptUri, textFile.getRefId()); ElementEventsType events = marshallingService.unMarshalXmlToElementEventsType(result); List<CreationEvent> creationEvents = events.getRelationEventOrAppellationEvent(); // get appellations with Quadriga text URI result = qstoreConnector.getAppellationEventsByConceptAndText(conceptUri, textFile.getTextFileURI()); events = marshallingService.unMarshalXmlToElementEventsType(result); creationEvents.addAll(events.getRelationEventOrAppellationEvent()); if (entry != null && entry.getWordnetId() != null && !entry.getWordnetId().isEmpty()) { int slashIdx = conceptUri.lastIndexOf("/"); String base = conceptUri.substring(0, slashIdx); String wordnetUri = base + "/" + entry.getWordnetId(); result = qstoreConnector.getAppellationEventsByConceptAndText(wordnetUri, textFile.getRefId()); events = marshallingService.unMarshalXmlToElementEventsType(result); creationEvents.addAll(events.getRelationEventOrAppellationEvent()); result = qstoreConnector.getAppellationEventsByConceptAndText(wordnetUri, textFile.getTextFileURI()); events = marshallingService.unMarshalXmlToElementEventsType(result); creationEvents.addAll(events.getRelationEventOrAppellationEvent()); } contents = textHelper.highlightAppellationEvents(contents, creationEvents); } return textHelper.getResponse(contents, response); } return new ResponseEntity<String>(HttpStatus.FORBIDDEN); } catch (FileStorageException e) { logger.error(e.getMessage()); String respMessage = "Error while retrieving the file content"; return new ResponseEntity<String>(respMessage, HttpStatus.NOT_FOUND); } } }