/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille * * ludovic.apvrille AT enst.fr * * This software is a computer program whose purpose is to allow the * edition of TURTLE analysis, design and deployment diagrams, to * allow the generation of RT-LOTOS or Java code from this diagram, * and at last to allow the analysis of formal validation traces * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP * from INRIA Rhone-Alpes. * * This software is governed by the CeCILL license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/ or redistribute the software under the terms of the CeCILL * license as circulated by CEA, CNRS and INRIA at the following URL * "http://www.cecill.info". * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided only * with a limited warranty and the software's author, the holder of the * economic rights, and the successive licensors have only limited * liability. * * In this respect, the user's attention is drawn to the risks associated * with loading, using, modifying and/or developing or reproducing the * software by the user in light of its specific status of free software, * that may mean that it is complicated to manipulate, and that also * therefore means that it is reserved for developers and experienced * professionals having in-depth computer knowledge. Users are therefore * encouraged to load and test the software's suitability as regards their * requirements in conditions enabling the security of their systems and/or * data to be ensured and, more generally, to use and operate it in the * same conditions as regards security. * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL license and that you accept its terms. */ package help; import myutil.GenericTree; import myutil.TraceManager; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; import java.util.Vector; import java.util.stream.Collectors; /** * Class HelpEntry * Creation: 28/02/2019 * Version 2.0 28/02/2019 * * @author Ludovic APVRILLE */ public class HelpEntry implements GenericTree { public HelpEntry linkToParent; Vector<HelpEntry> entries; public String masterKeyword; public String[] keywords; public String pathToHTMLFile; public String htmlContent; public HelpEntry() { } public String getMasterKeyword() { if (masterKeyword == null) { return "Help not loaded"; } return masterKeyword; } // Infos are: file of name, master key, list of keywords public boolean fillInfos(String infos) { infos = infos.trim(); infos = myutil.Conversion.replaceAllString(infos, " ", " "); String[] splitted = infos.split(" "); if (splitted.length < 3) { TraceManager.addDev("Split too small"); return false; } pathToHTMLFile = splitted[0] + ".html"; masterKeyword = splitted[1]; keywords = new String[splitted.length - 1]; for (int i = 0; i < splitted.length - 1; i++) { keywords[i] = splitted[i + 1]; } //TraceManager.addDev("Infos ok"); return true; } public String getToolTip() { if (keywords == null) { return ""; } if (keywords.length == 0) { return ""; } String ret = ""; for (int i=1; i<keywords.length; i++) { ret += keywords[i] + " "; } return ret; } public int getNbInHierarchy() { if (linkToParent == null) { return 0; } return 1 + linkToParent.getNbInHierarchy(); } public void addKid(HelpEntry he) { if (entries == null) { entries = new Vector<>(); } entries.add(he); } public boolean hasKids() { if (entries == null) { return false; } return entries.size() > 0; } public int getNbOfKids() { if (entries == null) { return 0; } return entries.size(); } public HelpEntry getKid(int index) { if (entries == null) { return null; } return entries.get(index); } public int getIndexOfKid(HelpEntry he) { if (entries == null) { return 0; } return entries.indexOf(he); } public String getHTMLContent() { if (htmlContent == null) { try { URL url = HelpManager.getURL(pathToHTMLFile); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); htmlContent = reader.lines().collect(Collectors.joining("\n")); //TraceManager.addDev("htmlcontent=" + getHTMLContent()); htmlContent = filterHTMLContent(htmlContent); } catch (Exception e) { TraceManager.addDev("Exception when retreiving HTML of " + pathToHTMLFile); return ""; } } return htmlContent; } private String filterHTMLContent(String input) { int index = input.indexOf("<meta http-equiv="); if (index == -1) { return input; } String ret1 = input.substring(0, index); String ret2 = input.substring(index+17, input.length()); index = ret2.indexOf("/>"); if (index == -1) { return input; } ret2 = ret2.substring(index+2, ret2.length()); return ret1 + ret2; } public HelpEntry getFather() { return linkToParent; } public String toString() { if ((masterKeyword == null) || (keywords == null)) { return "Help"; } /*String ret = masterKeyword + " ("; for(int i=1; i<keywords.length; i++) { ret += keywords[i] + " "; } ret += ")";*/ return masterKeyword.substring(0,1).toUpperCase() + masterKeyword.substring(1, masterKeyword.length()); } public String printHierarchy(int n) { String s = getHTMLContent(); String ret = ""; for (int i = 0; i < n; i++) { ret += " "; } ret += toString() + "\n"; if (entries != null) { for (HelpEntry he : entries) { ret += he.printHierarchy(n + 1); } } return ret; } public int getChildCount() { //TraceManager.addDev("GetChild count in " + toString() + " = " + getNbOfKids()); return getNbOfKids(); } public Object getChild(int index) { return getKid(index); } public int getIndexOfChild(Object child) { return getIndexOfKid((HelpEntry)child); } }