Example usage for org.jsoup.nodes Document toString

List of usage examples for org.jsoup.nodes Document toString

Introduction

In this page you can find the example usage for org.jsoup.nodes Document toString.

Prototype

public String toString() 

Source Link

Document

Gets this node's outer HTML.

Usage

From source file:org.tinymediamanager.scraper.zelluloid.ZelluloidMetadataProvider.java

@Override
public MediaMetadata getMetadata(MediaScrapeOptions options) throws Exception {
    LOGGER.debug("getMetadata() " + options.toString());

    // we can only work further if we got a search result on zelluloid.de
    if (options.getResult() == null) {
        throw new Exception("Scrape with Zelluloid.de without prior search is not supported");
    }/*from   ww  w. jav a2 s.  c o  m*/

    MediaMetadata md = new MediaMetadata(providerInfo.getId());
    // generic Elements used all over
    Elements el = null;
    // preset values from searchresult (if we have them)
    md.storeMetadata(MediaMetadata.ORIGINAL_TITLE,
            Utils.removeSortableName(options.getResult().getOriginalTitle()));
    md.storeMetadata(MediaMetadata.TITLE, Utils.removeSortableName(options.getResult().getTitle()));
    md.storeMetadata(MediaMetadata.YEAR, options.getResult().getYear());
    md.storeMetadata(MediaMetadata.ORIGINAL_TITLE, options.getResult().getOriginalTitle());

    String id = "";
    if (StringUtils.isEmpty(options.getResult().getId())) {
        id = StrgUtils.substr(options.getResult().getUrl(), "id=(.*?)");
    } else {
        id = options.getResult().getId();
    }

    String detailurl = options.getResult().getUrl();
    if (StringUtils.isEmpty(detailurl)) {
        detailurl = BASE_URL + "/filme/index.php3?id=" + id;
    }

    Url url;
    try {
        LOGGER.debug("get details page");
        url = new CachedUrl(detailurl);
        InputStream in = url.getInputStream();
        Document doc = Jsoup.parse(in, PAGE_ENCODING, "");
        in.close();

        // parse plot
        String plot = doc.getElementsByAttributeValue("class", "bigtext").text();
        md.storeMetadata(MediaMetadata.PLOT, plot);
        md.storeMetadata(MediaMetadata.TAGLINE, plot.length() > 150 ? plot.substring(0, 150) : plot);

        // parse poster
        el = doc.getElementsByAttributeValueStarting("src", "/images/poster");
        if (el.size() == 1) {
            md.storeMetadata(MediaMetadata.POSTER_URL, BASE_URL + el.get(0).attr("src"));
        }

        // parse year
        if (StringUtils.isEmpty(md.getStringValue(MediaMetadata.YEAR))) {
            el = doc.getElementsByAttributeValueContaining("href", "az.php3?j=");
            if (el.size() == 1) {
                md.storeMetadata(MediaMetadata.YEAR, el.get(0).text());
            }
        }

        // parse cinema release
        el = doc.getElementsByAttributeValueContaining("href", "?v=w");
        if (el.size() > 0) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
                Date d = sdf.parse(el.get(0).text());
                sdf = new SimpleDateFormat("yyyy-MM-dd");
                md.storeMetadata(MediaMetadata.RELEASE_DATE, sdf.format(d));
            } catch (Exception e) {
                LOGGER.warn("cannot parse cinema release date: " + el.get(0).text());
            }
        }

        // parse original title
        if (StringUtils.isEmpty(md.getStringValue(MediaMetadata.ORIGINAL_TITLE))) {
            md.storeMetadata(MediaMetadata.ORIGINAL_TITLE,
                    StrgUtils.substr(doc.toString(), "Originaltitel: (.*?)\\<"));
        }
        if (StringUtils.isEmpty(md.getStringValue(MediaMetadata.ORIGINAL_TITLE))) {
            md.storeMetadata(MediaMetadata.ORIGINAL_TITLE, md.getStringValue(MediaMetadata.TITLE));
        }

        // parse runtime
        String rt = (StrgUtils.substr(doc.toString(), "ca.&nbsp;(.*?)&nbsp;min"));
        if (!rt.isEmpty()) {
            try {
                md.storeMetadata(MediaMetadata.RUNTIME, Integer.valueOf(rt));
            } catch (Exception e2) {
                LOGGER.warn("cannot convert runtime: " + rt);
            }
        }

        // parse genres
        el = doc.getElementsByAttributeValueContaining("href", "az.php3?g=");
        for (Element g : el) {
            String gid = g.attr("href").substring(g.attr("href").lastIndexOf('=') + 1);
            md.addGenre(getTmmGenre(gid));
        }

        // parse cert
        // FSK: ab 12, $230 Mio. Budget
        String fsk = StrgUtils.substr(doc.toString(), "FSK: (.*?)[,<]");
        if (!fsk.isEmpty()) {
            md.addCertification(Certification.findCertification(fsk));
        }

        // parse rating
        Elements ratings = doc.getElementsByAttributeValue("class", "ratingBarTable");
        if (ratings.size() == 2) { // get user rating
            Element e = ratings.get(1);
            // <div>87%</div>
            String r = e.getElementsByTag("div").text().replace("%", "");
            try {
                md.storeMetadata(MediaMetadata.RATING, Double.valueOf(r) / 10); // only 0-10
            } catch (Exception e2) {
                LOGGER.warn("cannot convert rating: " + r);
            }
        }

        // details page
        doc = null;
        String detailsUrl = BASE_URL + "/filme/details.php3?id=" + id;
        try {
            url = new CachedUrl(detailsUrl);
            in = url.getInputStream();
            doc = Jsoup.parse(in, PAGE_ENCODING, "");
            in.close();
        } catch (Exception e) {
            LOGGER.error("failed to get details: " + e.getMessage());

            // clear cache
            CachedUrl.removeCachedFileForUrl(detailsUrl);
        }

        if (doc != null) {
            Element tab = doc.getElementById("ccdetails");
            int header = 0;
            String lastRole = "";
            for (Element tr : tab.getElementsByTag("tr")) {
                if (tr.toString().contains("dyngfx")) { // header gfx
                    if (tr.toString().contains("Besetzung")) {
                        header = 1;
                    } else if (tr.toString().contains("Crew")) {
                        header = 2;
                    } else if (tr.toString().contains("Produktion")) {
                        header = 3;
                    } else if (tr.toString().contains("Verleih")) {
                        header = 4;
                    } else if (tr.toString().contains("Alternativtitel")) {
                        header = 5;
                    }
                    continue;
                } else {
                    // no header gfx, so data
                    MediaCastMember mcm = new MediaCastMember();
                    el = tr.getElementsByTag("td");
                    if (header == 1) {
                        // actors
                        if (el.size() == 2) {
                            mcm.setCharacter(el.get(0).text());
                            mcm.setName(el.get(1).getElementsByTag("a").text());
                            mcm.setId(StrgUtils.substr(el.get(1).getElementsByTag("a").attr("href"),
                                    "id=(\\d+)"));
                            mcm.setType(MediaCastMember.CastType.ACTOR);
                            // System.out.println("Cast: " + mcm.getCharacter() + " - " +
                            // mcm.getName());
                            md.addCastMember(mcm);
                            // TODO: parse actor detail pages :/
                        }
                    } else if (header == 2) {
                        // crew
                        if (el.size() == 2) {
                            String crewrole = el.get(0).html().trim();
                            mcm.setName(el.get(1).getElementsByTag("a").text());
                            if (crewrole.equals("&nbsp;")) {
                                mcm.setPart(lastRole);
                            } else {
                                mcm.setPart(crewrole);
                                lastRole = crewrole;
                            }
                            if (crewrole.equals("Regie")) {
                                mcm.setType(MediaCastMember.CastType.DIRECTOR);
                            } else if (crewrole.equals("Drehbuch")) {
                                mcm.setType(MediaCastMember.CastType.WRITER);
                            } else {
                                mcm.setType(MediaCastMember.CastType.OTHER);
                            }
                            mcm.setId(StrgUtils.substr(el.get(1).getElementsByTag("a").attr("href"),
                                    "id=(\\d+)"));
                            // System.out.println("Crew: " + mcm.getPart() + " - " +
                            // mcm.getName());
                            md.addCastMember(mcm);
                        }
                    } else if (header == 3) {
                        // production
                        md.storeMetadata(MediaMetadata.PRODUCTION_COMPANY, el.get(0).text());
                    }
                }
            }
        }

        // get links page
        doc = null;
        String linksUrl = BASE_URL + "/filme/links.php3?id=" + id;
        try {
            url = new CachedUrl(linksUrl);
            in = url.getInputStream();
            doc = Jsoup.parse(in, PAGE_ENCODING, "");
            in.close();
        } catch (Exception e) {
            LOGGER.error("failed to get links page: " + e.getMessage());

            // clear cache
            CachedUrl.removeCachedFileForUrl(linksUrl);
        }

        if (doc != null) {
            el = doc.getElementsByAttributeValueContaining("href", "german.imdb.com");
            if (el != null && el.size() > 0) {
                String imdb = StrgUtils.substr(el.get(0).attr("href"), "(tt\\d{7})");
                if (imdb.isEmpty()) {
                    imdb = "tt" + StrgUtils.substr(el.get(0).attr("href"), "\\?(\\d+)");
                }
                md.setId(MediaMetadata.IMDBID, imdb);
            }
        }
    } catch (Exception e) {
        LOGGER.error("Error parsing " + options.getResult().getUrl());

        // clear cache
        CachedUrl.removeCachedFileForUrl(detailurl);

        throw e;
    }

    return md;
}

From source file:org.zaproxy.zap.extension.cmss.FastFingerprinter.java

/**
 * I think that should be modular too// w ww  .  j av  a2s.  c om
 *
 * @param url
 * @return
 */
public static ArrayList<String> JoomlaFastFingerprint(URL url) {
    // on se base sur ODZscanner
    WebPage wp = null;
    ArrayList<String> result = new ArrayList<String>();
    org.jsoup.nodes.Document doc = null;
    String dist = "";
    String htacc = "";
    String rdm = "";
    String doc2 = "";
    try {
        wp = new WebPage(url);
        doc = wp.getDocument();
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        doc2 = IOUtils.toString(CMSSUtils.getFileFromUrl(new URL(url.toString() + "/index.php?option=com_esi")),
                "UTF-8");
    } catch (Exception e) {

    }
    try {

        rdm = IOUtils.toString(CMSSUtils.getFileFromUrl(new URL(url.toString() + "/README.txt")), "UTF-8");
    } catch (Exception e) {

    }
    try {

        htacc = IOUtils.toString(CMSSUtils.getFileFromUrl(new URL(url.toString() + "/htaccess.txt")), "UTF-8");

    } catch (Exception e) {

    }

    try {

        dist = IOUtils.toString(CMSSUtils.getFileFromUrl(new URL(url.toString() + "/configuration.php-dist")),
                "UTF-8");

    } catch (Exception e) {

    }

    Pattern p, p2;
    p = Pattern.compile("<\\/html> <!-- \\d{1,30} -->");
    p2 = Pattern.compile("The page you are trying to access does not exist");
    try {
        Matcher m = p.matcher(doc.toString()), m2 = p2.matcher(doc2.toString());

        if (m.find() || m2.find()
                || WebAppGuesser.checkIfExist(new URL(url.toString() + "/language/english.xml"))
                || WebAppGuesser.checkIfExist(
                        new URL(url.toString() + "/administrator/templates/joomla_admin/images/security.png")))
            result.add("1.0.x");
    } catch (Exception e) {

    }

    p = Pattern.compile(" Joomla! 1.5 - Open Source Content Management");
    p2 = Pattern.compile("404- Component not found");

    try {
        Matcher m = p.matcher(doc.toString());
        Matcher m2 = p2.matcher(doc2);
        if (m.find() || m2.find()
                || WebAppGuesser.checkIfExist(
                        new URL(url.toString() + "/administrator/templates/khepri/images/j_login_lock.jpg"))
                || WebAppGuesser.checkIfExist(
                        new URL(url.toString() + "/administrator/templates/khepri/images/j_button1_next.png")))
            result.add("1.5.x");
    } catch (Exception e) {

    }

    p = Pattern.compile("package to version 3.0.x");

    try {
        Matcher m = p.matcher(rdm.toString());
        if (m.find() || WebAppGuesser.checkIfExist(
                new URL(url.toString() + "/administrator/templates/isis/img/glyphicons-halflings.png")))
            result.add("3.0.x");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("47 2005-09-15 02:55:27Z rhuk", htacc.toString()))
            result.add("[1.0.0 - 1.0.2]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("423 2005-10-09 18:23:50Z stingrey", htacc.toString()))
            result.add("1.0.3");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("1005 2005-11-13 17:33:59Z stingrey", htacc.toString()))
            result.add("[1.0.4 - 1.0.5]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("1570 2005-12-29 05:53:33Z eddieajau", htacc.toString()))
            result.add("[1.0.6 - 1.0.7]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("2368 2006-02-14 17:40:02Z stingrey", htacc.toString()))
            result.add("[1.0.8 - 1.0.9]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("44085 2006-06-21 16:03:54Z stingrey7 2005-09-15 02:55:27Z rhuk", htacc.toString()))
            result.add("1.0.10");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("4756 2006-08-25 16:07:11Z stingrey", htacc.toString()))
            result.add("1.0.11");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("5973 2006-12-11 01:26:33Z robs", htacc.toString()))
            result.add("1.0.12");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("5975 2006-12-11 01:26:33Z robs", htacc.toString()))
            result.add("[1.0.13 - 1.0.15]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("47 2005-09-15 02:55:27Z rhuk", dist.toString()))
            result.add("1.0.0");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("217 2005-09-21 15:15:58Z stingrey", dist.toString()))
            result.add("[1.0.1 - 1.0.2]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("506 2005-10-13 05:49:24Z stingrey", dist.toString()))
            result.add("[1.0.3 - 1.0.7]");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("2622 2006-02-26 04:16:09Z stingrey", dist.toString()))
            result.add("1.0.8");
    } catch (Exception e) {

    }
    try {
        if (searchByRegex("3754 2006-05-31 12:08:37Z stingrey", dist.toString()))
            result.add("[1.0.9 - 1.0.10]");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

From source file:picks.PickSite.java

private void getPage(int page) throws IOException {
    String urls = "http://huaban.com/search/?q=app%20%E5%BC%95%E5%AF%BC%E9%A1%B5&hyubwukg&page=" + page
            + "&per_page=20&wfl=1";
    Document html = null;

    html = Jsoup.connect(urls).header("User-Agent",
            "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5")
            .get();/*  w  w  w . ja v  a 2 s  .com*/

    String htmls = html.toString();
    int start = htmls.indexOf("app.page[\"pins\"]");
    int end = htmls.indexOf("app.page[\"category\"]");

    String jstr = htmls.substring(start + "app.page[\"pins\"] = ".length(), end);

    try {
        JSONArray arr = new JSONArray(jstr);
        for (int i = 0; i < arr.length(); i++) {
            JSONObject obj = (JSONObject) arr.get(i);

            String pin_id = obj.getString("pin_id");
            String app_name = obj.getString("raw_text");
            String link = obj.getString("link");

            html = Jsoup
                    .connect("http://218.244.156.133/foreplay/index.php?r=api/addAppSite&id=" + pin_id
                            + "&name=" + app_name + "&url=" + link)
                    .header("User-Agent",
                            "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5")
                    .get();
            System.out.println("http://218.244.156.133/foreplay/index.php?r=api/addAppSite&id=" + pin_id
                    + "&name=" + app_name + "&url=" + link + html.toString());

        }
    } catch (JSONException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

From source file:poe.trade.assist.SearchForm.java

private String removeAllExceptSearchForm(String html) {
    String htmlDirectory = htmlDirectory();
    Document doc = Jsoup.parse(html);

    // Remove stuff outside of id="main"
    //      doc.body().children().stream().filter(e -> !"main".equalsIgnoreCase(e.id())).forEach(e -> e.remove());

    Element head = doc.head();//from   w  w  w.  j ava 2  s.  c o m

    // Replace everthing in the <head>
    head.children().stream().forEach(e -> e.remove());
    head.appendElement("meta").attr("charset", "utf-8");
    head.appendElement("meta").attr("name", "viewport").attr("content", "width=device-width");
    head.appendElement("title").text("poe.trade.assist");
    head.appendElement("script").attr("type", "text/javascript").attr("src", htmlDirectory + "packed.js");
    head.appendElement("link").attr("rel", "stylesheet").attr("href", htmlDirectory + "packed_dark.css");

    // Show search form
    Optional.ofNullable(doc.getElementById("search-form")).ifPresent(e -> e.attr("style", ""));

    Optional.ofNullable(doc.getElementById("search"))
            .ifPresent(e -> e.attr("action", "http://poe.trade/search"));
    //      
    //      Element mainElement = doc.getElementById("main");
    //      Element topDivContainer = mainElement.child(0);
    //
    //      // Remove everthing that is not id="content" or h2
    //      topDivContainer.children().stream()
    //         .filter(e -> !"content".equalsIgnoreCase(e.id()))
    //         .filter(e -> !e.tag().getName().equalsIgnoreCase("h2"))
    //         .forEach(e -> e.remove());
    //      
    //      // Clean up stuff inside id="content"
    //      
    //         // Remove "Show search form", "search/import"
    //         Optional<Element> searchFormElem = doc.getElementsByTag("a").stream().filter(e -> e.hasClass("button") && e.hasClass("secondary") && e.hasClass("expand")).findFirst();
    //         searchFormElem.ifPresent(e -> e.remove());
    //         
    //         Optional<Element> searchOrImportDiv = doc.getElementsByTag("div").stream().filter(e -> e.hasClass("row") && e.hasClass("form-choose-action")).findFirst();
    //         searchOrImportDiv.ifPresent(e -> e.remove());
    //
    //         // Remove search results
    Elements searchResultBlocks = doc.getElementsByClass("search-results-block");
    if (searchResultBlocks.size() > 0) {
        searchResultBlocks.get(0).remove();
    }

    // append assist as the last element in body
    //       doc.body().appendElement("script").attr("type", "text/javascript").attr("src", htmlDirectory + "assist.js");

    String cleanHtml = doc.toString();
    return cleanHtml;
}

From source file:poe.trade.assist.SearchView.java

private String addHeadElements(String html) {
    String htmlDirectory = htmlDirectory();
    Document doc = Jsoup.parse(html);
    Element head = doc.head();//from   w  w  w.  j  a  v  a2 s  . c o m

    // Replace everthing in the <head>
    head.children().stream().forEach(e -> e.remove());
    head.appendElement("meta").attr("charset", "utf-8");
    head.appendElement("meta").attr("name", "viewport").attr("content", "width=device-width");
    head.appendElement("title").text("poe.trade.assist");
    head.appendElement("script").attr("type", "text/javascript").attr("src", htmlDirectory + "packed.js");
    head.appendElement("link").attr("rel", "stylesheet").attr("href", htmlDirectory + "packed_dark.css");

    doc.body().appendElement("script").attr("type", "text/javascript").attr("src", htmlDirectory + "assist.js");

    String cleanHTML = doc.toString();
    //      try {
    //         FileUtils.writeStringToFile(new File("test"), cleanHTML);
    //      } catch (IOException e1) {
    //         // TODO Auto-generated catch block
    //         e1.printStackTrace();
    //      }
    return cleanHTML;
}

From source file:revaligner.service.FileAligner.java

public void exportHtmlLogFileForFinalReview() throws Exception {
    System.out.println("creating log file for final review....");

    List<String> newtrgs = gatherNewTargetsFromTranslatedTxlf();
    List<List<String>> notes = gatherNotesFromTranslatedTxlf();
    org.jsoup.nodes.Document doc = Jsoup.parse(new File(this.htmlreportfortranslation_temp), "UTF-8", "");
    org.jsoup.nodes.Element ttl = doc.select("ttl").first();
    for (org.jsoup.nodes.Element radio : doc.select("input[type=\"radio\"]")) {
        if (radio.hasAttr("disabled")) {
            radio.removeAttr("disabled");
        }// w w  w . ja  v  a 2s .  c  om
    }
    for (org.jsoup.nodes.Element radiotext : doc.select(".filter")) {
        radiotext.attr("style", "#23407B;");
    }
    ttl.text("RA Report - For Final Reivew");

    Elements rows = doc.select("tr");

    int newtrgcnt = 0;
    for (int i = 3; i < rows.size(); i++) {
        org.jsoup.nodes.Element row = (org.jsoup.nodes.Element) rows.get(i);
        org.jsoup.nodes.Element trg = row.select("td.trg").first();
        org.jsoup.nodes.Element cmt = row.select("th.cmt").first();

        String orgtrgtext = trg.text().replace(" ", "<br>").replace("", " ");

        String newtrgtext = "";
        //System.out.println(newtrgs.get(newtrgcnt));
        if (!row.attr("id").isEmpty()) {
            newtrgtext = trimText((String) newtrgs.get(newtrgcnt), false)[0];

            List<String> note_list = (List) notes.get(newtrgcnt);
            String html = "";
            for (String note : note_list) {
                if (note_list.indexOf(note) != note_list.size() - 1) {
                    html = html + "&#8226;&nbsp;" + note.replace("\n", "<br>") + "<br>";
                } else {
                    html = html + "&#8226;&nbsp;" + note.replace("\n", "<br>");
                }
            }
            cmt.html(html);

            newtrgcnt++;
        }
        if (!orgtrgtext.equals(newtrgtext)) {
            row.addClass("TrgTracked");

            diff_match_patch dmp = new diff_match_patch();
            dmp.Diff_EditCost = 6;
            LinkedList<diff_match_patch.Diff> Diffs = dmp.diff_main(orgtrgtext, newtrgtext);
            dmp.diff_cleanupSemantic(Diffs);
            String result = dmp.diff_prettyHtml(Diffs);
            result = result.replace("&lt;br&gt;", "<br>").replace("<span>", "").replace("</span>", "")
                    .replaceAll("(?s)<ins[^>]*?>", "<ins>").replaceAll("(?s)</ins[^>]*?>", "</ins>")
                    .replaceAll("(?s)<del[^>]*?>", "<del>").replaceAll("(?s)</del[^>]*?>", "</del>");
            trg.html(result.replace(" ", "&nbsp;"));
        }
    }
    this.htmlreportforfinalreview = (new File(this.translatedtxlf).getParent() + File.separator
            + new File(this.sourcefile).getName().substring(0,
                    new File(this.sourcefile).getName().lastIndexOf("."))
            + "_final.html");
    if (new File(this.htmlreportforfinalreview).exists()) {
        new File(this.htmlreportforfinalreview).delete();
    }
    Writer logWriter = new OutputStreamWriter(new FileOutputStream(this.htmlreportforfinalreview), "UTF-8");
    logWriter.write(doc.toString().replace("&nbsp;", " "));
    logWriter.close();
}

From source file:revaligner.service.FileAligner.java

public void exportHtmlLogFileForTranslation(ArrayList<String[]> reportstats, int[] fr_stats) throws Exception {
    System.out.println("creating log file for translation....");
    StringBuffer sb = new StringBuffer();

    sb.append("<html>\n");
    sb.append("<head>\n");
    sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\" />\n");
    sb.append("<title>Source Changes Report</title>\n");
    sb.append("<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js\"></script>\n");

    sb.append("<STYLE type=\"text/css\">\n");
    sb.append("body, table {font-family: arial,sans-serif; font-size: 12px;}\n");
    sb.append("table {display: block; width:100%;}\n");
    sb.append("tbody {display: table; width:100%;}\n");
    sb.append("td {background: #FFFFFF; color: #000000;}\n");
    sb.append("th {background: #E0E0E0; text-align:center; font-weight:bold}\n");
    sb.append("ttl {font-size: 24; font-weight: bold; color : #888}\n");
    sb.append(//from   w  w  w  . j  av a  2  s  . c o  m
            ".lbsrc {float: left;text-align:center;border-radius:16px;box-shadow: 3px 3px 3px #888888;border: 1px solid #CCC;font-size: 12.3px;word-wrap: break-word;line-height: 16px;margin:6px 0px;padding: 2px 7px;width: 6%;outline: 0;vertical-align: baseline;background: #FFFFFF no-repeat 19px 19px;}\n");
    sb.append(
            ".lbtrg {float: left;text-align:center;border-radius:16px;box-shadow: 3px 3px 3px #888888;border: 1px solid #CCC;font-size: 12.3px;word-wrap: break-word;line-height: 16px;margin:6px;padding: 2px 7px;width: 6%;outline: 0;vertical-align: baseline;background: #E0EEEE no-repeat 19px 19px;}\n");
    sb.append(".fproperties {font-weight: bold;margin:2px;}\n");
    sb.append(".fpropertiescontent {font-weight: bold; color : #bbb}\n");
    sb.append(".filter {font-weight: bold;margin:2px;color:#23407B}\n");
    sb.append(".sid {width:5%}\n");
    sb.append(".act {width:5%;font-size:12px}\n");
    sb.append(".src {width:34%;white-space:pre-wrap;vertical-align:top;text-align:left;}\n");
    sb.append(
            ".trg {width:34%;background: #E0EEEE;white-space:pre-wrap;vertical-align:top;text-align:left;}\n");
    sb.append(".sco {width:4%}\n");
    sb.append(".swc {width:4%}\n");
    sb.append(".cmt {width:14%;text-align:left}\n");
    sb.append(".tdh {background:#C9C9C9;font-weight:bold;}\n");
    sb.append(".wc {background:#EEEEEE;font-weight:bold;text-align:center}\n");
    sb.append(".nomatch {font-weight:bold;text-align:center;background: #888;}\n");
    sb.append(".nontranslatable {font-weight:bold;text-align:center;background: #888;}\n");
    sb.append(".fuzzy {font-weight:bold;text-align:center;background: yellow;}\n");
    sb.append(".gold {font-weight:bold;text-align:center;background: #5EDA9E;}\n");
    sb.append("ins {color: #1E90FF;text-decoration: underline;}\n");
    sb.append("del {color: #990000;text-decoration: line-through;}\n");
    sb.append(".accept {border-color: #1E90FF}\n");
    sb.append(".reject {border-color: red}\n");
    sb.append(".normal {border-color: black}\n");
    sb.append(
            ".option {display:inline-block;cursor:pointer;border-style:solid;border-width:1px;width:10px;height:10px;margin-left:6%;margin-right:6%;border-radius: 2px;-moz-box-shadow:inset 0 0 10px #bbbbbb;-webkit-box-shadow: inset 0 0 10px #bbbbbb;box-shadow:inset 0 0 10px #bbbbbb;}\n");
    sb.append(".selected {font-size: 14px}\n");
    sb.append(".unselected {font-size: 6px}\n");
    sb.append(".topref{float:right;font-weight:bold;color:blue}\n");
    sb.append(
            "#search {float:right;position:fixed;top:1%;right:7px;opacity:0.5;width:40px;Background-color:#ccc;border-style:none;padding:2px}\n");
    sb.append("</STYLE>\n");

    sb.append("</head>\n");
    sb.append("<body>\n");
    sb.append("<ttl>RA Report - For Translation</ttl>\n");
    sb.append("<br />\n");
    sb.append("<br />\n");
    sb.append("<br />\n");
    sb.append("<div class=\"lbsrc\">source</div>\n");
    sb.append("<div class=\"lbtrg\">translation</div>\n");
    sb.append("<br />\n");
    sb.append("<br />\n");
    sb.append("<br />\n");
    sb.append("<hr>\n");
    sb.append(
            "<font color=\"1E90FF\">&#11035;&nbsp;accept track changes</font>&nbsp;&nbsp;<font color=\"red\">&#11035;&nbsp;reject track changes</font>&nbsp;&nbsp;&#11035;&nbsp;show all track changes\n");
    sb.append("<br />\n");
    sb.append("<br />\n");
    sb.append("<div class=\"fproperties\">File Name : &nbsp;&nbsp;<span class=\"fpropertiescontent\">"
            + new File(this.populatedsourcetxlf).getName() + "</span></div>\n");
    sb.append("<div class=\"fproperties\">Language Pair : &nbsp;&nbsp;<span class=\"fpropertiescontent\">"
            + this.sourcelanguage + " > " + this.targetlanguage + "</span></div>\n");

    StringBuffer sb3 = new StringBuffer();
    sb3.append(
            "<table cellspacing=\"0\" cellpadding=\"4\" bgcolor=\"#E0E0E0\" border=\"1\" bordercolor=\"#224466\" style=\"table-layout:fixed\">\n");
    sb3.append("<tr>\n");

    sb3.append("<th class=\"tdh\">Source</th>\n");
    sb3.append("<th class=\"tdh\">Fully Aligned</th>\n");
    sb3.append("<th class=\"tdh\">Aligned but Need Review</th>\n");
    sb3.append("<th class=\"tdh\">Aligned but Source Tracked</th>\n");
    sb3.append("<th class=\"tdh\">Not Aligned</th>\n");
    sb3.append("<th class=\"tdh\">Total</th>\n");
    sb3.append("</tr>\n");

    int generalid = 0;
    int tc_count = 0;
    StringBuffer sb2 = new StringBuffer();
    sb2.append(
            "<table cellspacing=\"0\" cellpadding=\"4\" bgcolor=\"#E0E0E0\" border=\"1\" bordercolor=\"#224466\" style=\"table-layout:fixed\">\n");
    sb2.append("<tr>\n");
    sb2.append("<th class=\"tdh sid\">Segment ID</th>\n");
    sb2.append("<th class=\"tdh act\">View</th>\n");
    sb2.append("<th class=\"tdh src\">Source</th>\n");
    sb2.append("<th class=\"tdh trg\">Target</th>\n");
    sb2.append("<th class=\"tdh sco\">Score</th>\n");
    sb2.append("<th class=\"tdh swc\">Count</th>\n");
    sb2.append("<th class=\"tdh cmt\">Comment</th>\n");
    sb2.append("</tr>\n");

    int wc_gold = 0;
    int wc_fuzzy_high = 0;
    int wc_fuzzy_low = 0;
    int wc_nomatch = 0;
    int wc_reps = fr_stats[0];
    int wc_fuzzyreps = fr_stats[1];
    for (int i = 0; i < reportstats.size(); i++) {
        String[] rstats = (String[]) reportstats.get(i);

        String source = rstats[0];
        String target = rstats[1];
        String score = rstats[2];
        String match_type = rstats[3];
        String tc_type = rstats[4];
        String wc = rstats[5];
        String comment = rstats[6];
        if ((tc_type.equals("INSERTION")) || (tc_type.equals("MIX"))) {
            tc_count++;
        }
        if (!match_type.equals("N/A")) {
            generalid++;
            sb2.append("<tr id=\"" + generalid + "\" class=\"tp" + tc_type + "\">\n");
            sb2.append("<th class=\"sid\">" + generalid + "</td>\n");
        } else {
            sb2.append("<tr class=\"tp" + tc_type + "\">\n");
            sb2.append("<th class=\"sid\">N/A</td>\n");
        }
        sb2.append(
                "<th class=\"act\"><div class=\"option accept\"></div><div class=\"option reject\"></div><div class=\"option normal\"></div></td>\n");
        sb2.append("<td class=\"src\">" + source.replace(" ", "&nbsp;") + "</td>\n");
        sb2.append("<td class=\"trg\">" + target.replace(" ", "&nbsp;") + "</td>\n");
        if (match_type.equals("exact-match")) {
            sb2.append("<td class=\"sco gold\">" + score + "</td>\n");
            sb2.append("<th class=\"swc\">" + wc + "</td>\n");
            wc_gold += Integer.parseInt(wc);
        } else if (match_type.equals("fuzzy-match")) {
            sb2.append("<td class=\"sco fuzzy\">" + score + "</td>\n");
            sb2.append("<th class=\"swc\">" + wc + "</td>\n");
            if (score.equals("75")) {
                wc_fuzzy_low += Integer.parseInt(wc);
            } else {
                wc_fuzzy_high += Integer.parseInt(wc);
            }
        } else if (match_type.equals("x-no-match")) {
            sb2.append("<td class=\"sco nomatch\">" + score + "</td>\n");
            sb2.append("<th class=\"swc\">" + wc + "</td>\n");
            wc_nomatch += Integer.parseInt(wc);
        } else {
            sb2.append("<td class=\"sco nontranslatable\">" + score + "</td>\n");
            sb2.append("<th class=\"swc\">" + wc + "</td>\n");
        }
        sb2.append("<th class=\"cmt\">" + comment + "</td>\n");
        sb2.append("</tr>\n");
    }
    sb2.append("</table>\n");

    sb3.append("<tr>\n");
    if (Locale.makeLocale(this.sourcelanguage).isFarEast()) {
        sb3.append("<th class=\"tdh\">Character Count</th>\n");
    } else {
        sb3.append("<th class=\"tdh\">Word Count</th>\n");
    }
    wc_nomatch = wc_nomatch - wc_reps - wc_fuzzyreps;
    sb3.append("<td class=\"wc\">" + wc_gold + "</th>\n");
    sb3.append("<td class=\"wc\">" + wc_fuzzy_high + "</th>\n");
    sb3.append("<td class=\"wc\">" + wc_fuzzy_low + "</th>\n");
    sb3.append("<td class=\"wc\">" + wc_nomatch + "</th>\n");

    sb3.append("<td class=\"wc\">"
            + (wc_gold + wc_fuzzy_high + wc_fuzzy_low + wc_nomatch + wc_reps + wc_fuzzyreps) + "</th>\n");
    sb3.append("</tr>\n");
    sb3.append("</table>\n");

    sb.append(
            "<div class=\"fproperties\">Number of Segments with Track Changes / Total Segments(in TXLF): &nbsp;&nbsp;<span class=\"fpropertiescontent\">"
                    + tc_count + " / " + generalid + "</span></div>\n");
    sb.append("<br />\n");

    sb.append(sb3);
    sb.append("<br />\n");

    sb.append("<form>\n");
    sb.append(
            "<input type=\"checkbox\" name=\"CKB\" value=\"SIT\"><span class=\"filter\">Show Segments in the TXLF Only</span>\n");
    sb.append("<br />\n");
    sb.append("<hr>\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"SA\" checked><span class=\"filter\">Show All</span>\n");
    sb.append("<br />\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"ST\"><span class=\"filter\">Show Changed Segments</span>\n");
    sb.append("<br />\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"STS\"><span class=\"filter\">Show Changed Sources</span>\n");
    sb.append("<br />\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"STT\" disabled><span class=\"filter\" style=\"color:#bbbbbb\">Show Changed Targets</span>\n");
    sb.append("<br />\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"STSNTT\" disabled><span class=\"filter\" style=\"color:#bbbbbb\">Show Changed Sources with Non-Changed Targets</span>\n");
    sb.append("<br />\n");
    sb.append(
            "<input type=\"radio\" name=\"Filter\" value=\"SNTTS\" disabled><span class=\"filter\" style=\"color:#bbbbbb\">Show Non-Changed Sources with Changed Targets</span>\n");
    sb.append("</form>\n");

    sb.append(sb2);

    sb.append("<br />\n");

    sb.append("<form action=\"javascript:goToSegment();\">\n");
    sb.append(
            "<input type=\"text\" id=\"search\" onfocus=\"searchfocus(this)\" onblur=\"searchnotfocus(this)\">\n");
    sb.append("</form>\n");

    sb.append("<a class=\"topref\" href=\"#TOP\" title=\"Back to Top\">TOP</a>\n");
    sb.append("<br />\n");
    sb.append("<hr>\n");
    sb.append("<br />\n");
    sb.append("<br />\n");

    sb.append("<script type=\"text/javascript\">\n");
    sb.append("$(document).ready(function(){\n");
    sb.append("var norms = $(document).find('.normal');\n");
    sb.append("for (var i = 0; i < norms.length; i++) {\n");
    sb.append("$(norms[i]).addClass(\"selected\");\n");
    sb.append("$(norms[i]).css(\"background-color\",\"black\");\n");
    sb.append("}\n");
    sb.append("});\n");
    sb.append("\n");

    sb.append("function goToSegment() {\n");
    sb.append("var segid = document.getElementById(\"search\").value;\n");
    sb.append("location.href = \"#\" + segid;\n");
    sb.append("}\n");
    sb.append("\n");
    sb.append("function searchfocus(field) {\n");
    sb.append("field.style.background = \"red\";\n");
    sb.append("}\n");
    sb.append("\n");
    sb.append("function searchnotfocus(field) {\n");
    sb.append("field.style.background = \"#ccc\";\n");
    sb.append("}\n");
    sb.append("\n");

    sb.append("$(\".accept\").click(function() {\n");
    sb.append("if(!$(this).hasClass(\"selected\")){\n");
    sb.append("$(this).removeClass(\"unselected\")\n");
    sb.append("$(this).addClass(\"selected\")\n");
    sb.append("$(this).css(\"background-color\",\"1E90FF\");\n");
    sb.append("var rej = $(this).parent().find('.reject')[0];\n");
    sb.append("var nor = $(this).parent().find('.normal')[0];\n");
    sb.append("$(rej).removeClass(\"selected\");\n");
    sb.append("$(rej).addClass(\"unselected\");\n");
    sb.append("$(rej).css(\"background-color\",\"\");\n");
    sb.append("$(nor).removeClass(\"selected\");\n");
    sb.append("$(nor).addClass(\"unselected\");\n");
    sb.append("$(nor).css(\"background-color\",\"\");\n");
    sb.append("\n");
    sb.append("var accepts = $(this).parent().parent().find('ins');\n");
    sb.append("for (var i = 0; i < accepts.length; i++) {\n");
    sb.append("accepts[i].style.display = \"inline\";\n");
    sb.append("accepts[i].style.textDecoration = \"none\";\n");
    sb.append("}\n");
    sb.append("var rejects = $(this).parent().parent().find('del');\n");
    sb.append("for (var i = 0; i < rejects.length; i++) {\n");
    sb.append("rejects[i].style.display = \"none\";\n");
    sb.append("}\n");
    sb.append("}\n");
    sb.append("});\n");
    sb.append("\n");
    sb.append("$(\".reject\").click(function() {\n");
    sb.append("if(!$(this).hasClass(\"selected\")){\n");
    sb.append("$(this).removeClass(\"unselected\")\n");
    sb.append("$(this).addClass(\"selected\")\n");
    sb.append("$(this).css(\"background-color\",\"red\");\n");
    sb.append("var act = $(this).parent().find('.accept')[0];\n");
    sb.append("var nor = $(this).parent().find('.normal')[0];\n");
    sb.append("$(act).removeClass(\"selected\");\n");
    sb.append("$(act).addClass(\"unselected\");\n");
    sb.append("$(act).css(\"background-color\",\"\");\n");
    sb.append("$(nor).removeClass(\"selected\");\n");
    sb.append("$(nor).addClass(\"unselected\");\n");
    sb.append("$(nor).css(\"background-color\",\"\");\n");
    sb.append("\n");
    sb.append("var accepts = $(this).parent().parent().find('ins');\n");
    sb.append("for (var i = 0; i < accepts.length; i++) {\n");
    sb.append("accepts[i].style.display = \"none\";\n");
    sb.append("}\n");
    sb.append("var rejects = $(this).parent().parent().find('del');\n");
    sb.append("for (var i = 0; i < rejects.length; i++) {\n");
    sb.append("rejects[i].style.display = \"inline\";\n");
    sb.append("rejects[i].style.textDecoration = \"none\";\n");
    sb.append("}\n");
    sb.append("}\n");
    sb.append("});\n");
    sb.append("\n");
    sb.append("$(\".normal\").click(function() {\n");
    sb.append("if(!$(this).hasClass(\"selected\")){\n");
    sb.append("$(this).removeClass(\"unselected\")\n");
    sb.append("$(this).addClass(\"selected\")\n");
    sb.append("$(this).css(\"background-color\",\"black\");\n");
    sb.append("var act = $(this).parent().find('.accept')[0];\n");
    sb.append("var rej = $(this).parent().find('.reject')[0];\n");
    sb.append("$(act).removeClass(\"selected\");\n");
    sb.append("$(act).addClass(\"unselected\");\n");
    sb.append("$(act).css(\"background-color\",\"\");\n");
    sb.append("$(rej).removeClass(\"selected\");\n");
    sb.append("$(rej).addClass(\"unselected\");\n");
    sb.append("$(rej).css(\"background-color\",\"\");\n");
    sb.append("\n");
    sb.append("var accepts = $(this).parent().parent().find('ins');\n");
    sb.append("for (var i = 0; i < accepts.length; i++) {\n");
    sb.append("accepts[i].style.display = \"inline\";\n");
    sb.append("accepts[i].style.textDecoration = \"underline\";\n");
    sb.append("}\n");
    sb.append("var rejects = $(this).parent().parent().find('del');\n");
    sb.append("for (var i = 0; i < rejects.length; i++) {\n");
    sb.append("rejects[i].style.display = \"inline\";\n");
    sb.append("rejects[i].style.textDecoration = \"line-through\";\n");
    sb.append("}\n");
    sb.append("}\n");
    sb.append("});\n");
    sb.append("\n");

    sb.append("$(\"input[name='CKB']\").change(function(){");
    sb.append("if($(this).is(':checked')){");
    sb.append("$('.tpDELETION').hide();");
    sb.append("}else{");
    sb.append(
            "if($(\"input[value='SA']\").is(':checked') || $(\"input[value='STS']\").is(':checked') || $(\"input[value='STSNTT']\").is(':checked')){");
    sb.append("$('.tpDELETION').show();");
    sb.append("}else{");
    sb.append("$('.tpDELETION').hide();");
    sb.append("}");
    sb.append("}");
    sb.append("});");
    sb.append("\n");
    sb.append("$(\"input[name='Filter']\").change(function(){");
    sb.append("var value = $(this).val();");
    sb.append("if(value == \"SA\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("$(tr).show();");
    sb.append("}else{");
    sb.append("if($(\"input[name='CKB']\").is(':checked')){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}");
    sb.append("}");
    sb.append("}else if(value == \"ST\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("if(!$(tr).hasClass(\"tpNONE\") || $(tr).hasClass(\"TrgTracked\")){");
    sb.append("$(tr).show();");
    sb.append("}else{");
    sb.append("$(tr).hide();");
    sb.append("}");
    sb.append("}else{");
    sb.append("if($(\"input[name='CKB']\").is(':checked')){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}");
    sb.append("}");
    sb.append("}else if(value == \"STS\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("if($(tr).hasClass(\"tpNONE\")){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}else{");
    sb.append("if($(\"input[name='CKB']\").is(':checked')){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}");
    sb.append("}");
    sb.append("}else if(value == \"STT\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("if($(tr).hasClass(\"TrgTracked\")){");
    sb.append("$(tr).show();");
    sb.append("}else{");
    sb.append("$(tr).hide();");
    sb.append("}");
    sb.append("}else{");
    sb.append("$(tr).hide();");
    sb.append("}");
    sb.append("}");
    sb.append("}else if(value == \"STSNTT\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("if($(tr).hasClass(\"tpNONE\") || $(tr).hasClass(\"TrgTracked\")){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}else{");
    sb.append("if($(\"input[name='CKB']\").is(':checked')){");
    sb.append("$(tr).hide();");
    sb.append("}else{");
    sb.append("$(tr).show();");
    sb.append("}");
    sb.append("}");
    sb.append("}");
    sb.append("}else if(value == \"SNTTS\"){");
    sb.append("var trs = document.getElementsByTagName(\"tr\");");
    sb.append("for(i=3;i<trs.length;i++){");
    sb.append("var tr = trs[i];");
    sb.append("if(!$(tr).hasClass(\"tpDELETION\")){");
    sb.append("if($(tr).hasClass(\"tpNONE\") && $(tr).hasClass(\"TrgTracked\")){");
    sb.append("$(tr).show();");
    sb.append("}else{");
    sb.append("$(tr).hide();");
    sb.append("}");
    sb.append("}else{");
    sb.append("$(tr).hide();");
    sb.append("}");
    sb.append("}");
    sb.append("}");
    sb.append("});");
    sb.append("\n");
    sb.append("</script>");

    sb.append("</body>\n");
    sb.append("</html>\n");

    this.htmlreportfortranslation = (new File(this.prjfolder) + File.separator + new File(this.sourcefile)
            .getName().substring(0, new File(this.sourcefile).getName().lastIndexOf(".")) + "_aligned.html");
    this.htmlreportfortranslation_temp = (new File(this.prjfolder) + File.separator + new File(this.sourcefile)
            .getName().substring(0, new File(this.sourcefile).getName().lastIndexOf(".")) + "_aligned.temp");
    if (new File(this.htmlreportfortranslation).exists()) {
        new File(this.htmlreportfortranslation).delete();
    }
    org.jsoup.nodes.Document doc = Jsoup.parse(sb.toString());
    Writer logWriter = new OutputStreamWriter(new FileOutputStream(this.htmlreportfortranslation), "UTF-8");
    logWriter.write(doc.toString().replace("&nbsp;", " "));

    Writer logWriter_temp = new OutputStreamWriter(new FileOutputStream(this.htmlreportfortranslation_temp),
            "UTF-8");
    logWriter_temp.write(doc.toString());

    logWriter.close();
    logWriter_temp.close();
}

From source file:webserver.WebResource.java

@Path("index/blockexplorer.html")
@GET/*from   w  w w . j  av  a2 s  .c o m*/
public Response blockexplorerhtml() {
    String content;
    JSONObject langObj;
    String lang = request.getParameter("lang");
    try {
        content = readFile("web/blockexplorer.html", StandardCharsets.UTF_8);

    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
        return error404(request, null);
    }

    Document doc = null;

    doc = Jsoup.parse(content);

    //   Element element = doc.getElementById("menu_top_100_");
    //   if (element != null)   element.text("werwfyrtyryrtyrtyrtyrtyrtyrtyrtytyrerwer");

    //      

    if (lang != null) {

        langObj = Lang.openLangFile(lang + ".json");

        Elements el = doc.select("translate");
        for (Element e : el) {
            e.text(Lang.getInstance().translate_from_langObj(e.text(), langObj));
        }
    }

    return Response.ok(doc.toString(), "text/html; charset=utf-8").build();

}