]> SALOME platform Git repositories - tools/siman.git/blob - Workspace/Siman/src/org/splat/simer/KnowledgeElementFacade.java
Salome HOME
Tool bar is improved.
[tools/siman.git] / Workspace / Siman / src / org / splat / simer / KnowledgeElementFacade.java
1 package org.splat.simer;
2
3 import org.splat.dal.bo.som.KnowledgeElement;
4 import org.splat.wapp.PopupMenu;
5
6
7 public class KnowledgeElementFacade {
8
9     private KnowledgeElement  my;
10     private State             state;
11     private String            value;
12     private PopupMenu         popup;
13     
14     private enum State { closed, open }
15
16 //  ==============================================================================================================================
17 //  Constructor
18 //  ==============================================================================================================================
19
20     public KnowledgeElementFacade (KnowledgeElement represented) {
21 //  ------------------------------------------------------------
22       my    = represented;
23       state = State.closed;
24
25       this.refresh();              // Initializes the presentation of my knowledge
26     }
27
28 //  ==============================================================================================================================
29 //  Public member functions
30 //  ==============================================================================================================================
31
32     public void develop () {
33 //  ----------------------
34       state = State.open;
35     }
36
37     public void reduce () {
38 //  ---------------------
39       state = State.closed;
40     }
41
42 //  ==============================================================================================================================
43 //  Getters
44 //  ==============================================================================================================================
45
46     public String getFullValue () {
47 //  -----------------------------
48       return my.getValue().replaceAll("'", "&#145").replaceAll("\"", "&#34");
49     }
50     public String getIndex () {
51 //  -------------------------
52       return String.valueOf(my.getIndex());
53     }
54     public PopupMenu getPopup () {
55 //  ----------------------------
56       popup.setContext("feedbex", my);     // Cannot be done at construction because pop-ups are shared
57       return popup;
58     }
59     public String getPresentationState () {
60 //  -------------------------------------
61       return state.toString();
62     }
63     public String getProgressState () {
64 //  ---------------------------------
65       return my.getProgressState().toString();
66     }
67     public String getTitle () {
68 //  -------------------------
69       return my.getTitle();
70     }
71     public String getValue () {
72 //  -------------------------
73       if (state == State.closed) return value;
74       else                       return my.getValue();
75     }
76     public boolean isFacadeOf (KnowledgeElement represented) {
77 //  --------------------------------------------------------
78       return  my.equals(represented);
79     }
80
81 //  ==============================================================================================================================
82 //  Protected services
83 //  ==============================================================================================================================
84
85     protected void refresh () {
86 //  -------------------------
87       String[] tags = {"<b>", "<i>", "<u>", "<sup>", "<sub>" };
88
89           popup = ApplicationSettings.getPopupMenu("feedbex");
90       value = my.getValue();
91
92 //    One line extract of the knowledge value
93       int size = 70 + 3;                      // Maximum length displayable on 1 line, including the starting <p> tag
94       int  i;
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
98       }
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
105         if (endex > size) {
106           endex = size;
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 == '.') {
113                   endex += 1;
114                   break;
115                 }
116           }
117         }
118         else  size  = 0;
119
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 + " ...";
125       }
126       else {
127         if (value.length() > size-3) value = value.substring(0, size-3) + " ...";
128       }
129     }
130 }