package werti.util; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.io.UnsupportedEncodingException; import org.apache.uima.jcas.JCas; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import werti.server.ActivityConfiguration; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; /** * Produces an HTML document with enhancements from a CAS containing * Enhancements. * * @author Adriane Boyd * */ public class HTMLEnhancer { private static final Logger log = LogManager.GetLogger(HTMLEnhancer.class); private JCas cas; /** * @param cCas CAS with annotations for the topic */ public HTMLEnhancer(final JCas cCas) { cas = cCas; } /** * Converts an HTML CAS document with Enhancements to an HTML string. * * @return an HTML string containing enhancements */ public String enhance(final String activity, final String baseurl, HttpServletRequest req, ActivityConfiguration config, String servletContextName) throws UnsupportedEncodingException { HashMap dict = new HashMap(); // translations of topics and activities to North Sámi dict.put("SubstantiveSingular", "Substantiivvat ovttaidlogus"); dict.put("SubstantivePlural", "Substantiivvat máŋggaidlogus"); dict.put("VerbConjugation", "Finihtta vearbbat"); dict.put("NegVerbs", "Biehttalanvearbbat"); dict.put("InfiniteVerbs", "Infinihtta vearbbat"); dict.put("Conjunctions", "Konjunkšuvnnat"); dict.put("Substantive", "Substantiivvat"); dict.put("Subject", "Subjeakta"); dict.put("Object", "Objeakta"); dict.put("Adverbial", "Adverbiála"); dict.put("colorize", "Geahča ivdnejuvvon sániid."); dict.put("click", "Coahkkal rivttes sániid!"); dict.put("mc", "Vállje rivttes sániid!"); dict.put("cloze", "Čále rivttes sániid!"); String enhancement = req.getParameter("client.enhancement"); String activityCat = activity.toLowerCase(); // get the translations of the topic and the exercise type to sme from the small dictionary String activity_sme = dict.get(activity); String enhancement_sme = dict.get(enhancement); String htmlString = EnhancerUtils.casToEnhanced(cas, enhancement); // replace tags with wertiview spans // (this should probably be done with a real tree traversal, but it was causing me headaches and // a search and replace is probably sufficient and quicker) htmlString = htmlString.replace("", ""); htmlString = htmlString.replace("", ""); Document htmlDoc = Jsoup.parse(htmlString); // add base url Element base = htmlDoc.createElement("base"); base.attr("href", baseurl); htmlDoc.head().appendChild(base); // Write the chosen topic and activity in North Sámi into the page title. So the user has a short reminder about the exercise. String topic_activity = activity_sme + ": " + enhancement_sme; String customised_title = new String(topic_activity.getBytes(), "UTF-8"); // encode the title string as utf8 Element title = htmlDoc.select("title").first(); if (title == null) { log.info("title null"); } else { title.text(customised_title); } // add js libraries String thisUrl = req.getRequestURL().toString(); thisUrl = thisUrl.replace("http", "https"); thisUrl = thisUrl.replaceFirst("/WERTiServlet",""); log.info("URL to js-lib:{}", thisUrl); //thisUrl = thisUrl.replaceFirst("(?<=" + servletContextName + ").*", ""); // something went wrong with the url on gtlab, so that js libraries and .css files had wrong paths if (activity.matches("Arts") || activity.matches("Dets")) { activityCat = "pos"; } final String jqueryJS = ""; final String wertiviewJS = ""; final String blurJS = ""; final String notificationJS = ""; final String wertiviewCSS = ""; final String libJS = ""; final String activityJS = ""; final String topicJS = ""; final String loadJS = "\n"; htmlDoc.head().append(jqueryJS); htmlDoc.head().append(wertiviewJS); htmlDoc.head().append(blurJS); htmlDoc.head().append(notificationJS); htmlDoc.head().append(wertiviewCSS); htmlDoc.head().append(libJS); htmlDoc.head().append(activityJS); htmlDoc.head().append(topicJS); htmlDoc.head().append(loadJS); htmlDoc.body().prependElement("p").attr("class", "p_reminder"); htmlDoc.body().select("p.p_reminder").append(""+activity_sme+": "+enhancement_sme+""); htmlDoc.select("span.wertiview").select("span").attr("style", EnhancerUtils.addedSpanStyle); return htmlDoc.html(); } }