1 package org.splat.simer;
3 import org.splat.dal.bo.som.KnowledgeElement;
4 import org.splat.wapp.PopupMenu;
7 public class KnowledgeElementFacade {
9 private KnowledgeElement my;
12 private PopupMenu popup;
14 private enum State { closed, open }
16 // ==============================================================================================================================
18 // ==============================================================================================================================
20 public KnowledgeElementFacade (KnowledgeElement represented) {
21 // ------------------------------------------------------------
25 this.refresh(); // Initializes the presentation of my knowledge
28 // ==============================================================================================================================
29 // Public member functions
30 // ==============================================================================================================================
32 public void develop () {
33 // ----------------------
37 public void reduce () {
38 // ---------------------
42 // ==============================================================================================================================
44 // ==============================================================================================================================
46 public String getFullValue () {
47 // -----------------------------
48 return my.getValue().replaceAll("'", "‘").replaceAll("\"", """);
50 public String getIndex () {
51 // -------------------------
52 return String.valueOf(my.getIndex());
54 public PopupMenu getPopup () {
55 // ----------------------------
56 popup.setContext("feedbex", my); // Cannot be done at construction because pop-ups are shared
59 public String getPresentationState () {
60 // -------------------------------------
61 return state.toString();
63 public String getProgressState () {
64 // ---------------------------------
65 return my.getProgressState().toString();
67 public String getTitle () {
68 // -------------------------
71 public String getValue () {
72 // -------------------------
73 if (state == State.closed) return value;
74 else return my.getValue();
76 public boolean isFacadeOf (KnowledgeElement represented) {
77 // --------------------------------------------------------
78 return my.equals(represented);
81 // ==============================================================================================================================
83 // ==============================================================================================================================
85 protected void refresh () {
86 // -------------------------
87 String[] tags = {"<b>", "<i>", "<u>", "<sup>", "<sub>" };
89 popup = ApplicationSettings.getPopupMenu("feedbex");
90 value = my.getValue();
92 // One line extract of the knowledge value
93 int size = 70 + 3; // Maximum length displayable on 1 line, including the starting <p> tag
95 for (i=0; i<tags.length; i++) {
96 int pos = value.indexOf(tags[i]);
97 if (pos > -1 && pos < size) size = size + 2*tags[i].length() + 1; // Inclusion of the open and close tags
99 if (value.startsWith("<p>")) {
100 int endex = value.indexOf("</p>");
101 if ((i=value.indexOf("<br")) > 0) if (i < endex) endex = i;
102 if ((i=value.indexOf("<ul>")) > 0) if (i < endex) endex = i;
103 if ((i=value.indexOf("<ol>")) > 0) if (i < endex) endex = i;
104 int next = endex + 4; // Index of the next paragraph, if exist
107 char endchar = value.charAt(endex);
108 if (endchar == '-' || endchar == ',' || endchar == ';' || endchar == '.') endex += 1;
109 else if (endchar != ' ') while (--endex > 0) {
110 endchar = value.charAt(endex);
111 if (endchar == ' ') break;
112 if (endchar == '-' || endchar == ',' || endchar == ';' || endchar == '.') {
120 value = value.substring(3, endex).trim();
121 if ((i=value.lastIndexOf("b>")) > 0) if (value.charAt(i-1) == '<') value = value + "</b>";
122 if ((i=value.lastIndexOf("i>")) > 0) if (value.charAt(i-1) == '<') value = value + "</i>";
123 if ((i=value.lastIndexOf("u>")) > 0) if (value.charAt(i-1) == '<') value = value + "</u>";
124 if (my.getValue().length() > next || size > 0) value = value + " ...";
127 if (value.length() > size-3) value = value.substring(0, size-3) + " ...";