/*
* Projet : Trustopics
* Version : 0.2.1
* Fichier : TopicsTextPane.java
*/
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JTextPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
public class TopicsTextPane extends JTextPane implements HyperlinkListener {
private Vector glb_vectTopicsList = new Vector();
private Vector glb_vectTopicsHtmlList = new Vector();
private String[][] glb_htmlDatas_0 = new String[2][2];
private String[][] glb_htmlDatas_1 = new String[3][3];
private String[][] glb_htmlDatas_2 = new String[5][3];
private boolean glb_htmlDataAdd = false;
private HTMLEditorKit glb_kit;
private HTMLDocument glb_doc;
/*
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
*/
public TopicsTextPane() {
InitDatas();
glb_kit = new HTMLEditorKit();
glb_doc = (HTMLDocument) (glb_kit.createDefaultDocument());
addHyperlinkListener(this);
addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent evt) {
glb_htmlDataAdd = false;
UpdateList();
}
});
setEditable(false);
setEditorKit(glb_kit);
setDocument(glb_doc);
setContentType("text/html");
setBackground(Defines.UIcolBackGDrawing);
LoadTopics();
setText(CreateHtmlList());
}
public void ExternClear() {
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
int lcl_nbTopic = lcl_ctu.GetTotalTopic();
if (lcl_nbTopic > 0) {
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
for (int i = 0 ; i < lcl_nbTopic ; i++) {
lcl_topicsDatas = lcl_ctu.GetTopicDatas(1);
lcl_ctu.DelTopicDatas(lcl_topicsDatas);
glb_vectTopicsList.removeElementAt(0);
glb_vectTopicsHtmlList.removeElementAt(0);
}
lcl_ctu.SaveTopicsDatas();
UpdateList();
}
}
public void ExternRaz() {
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
int lcl_nbTopic = lcl_ctu.GetTotalTopic();
if (lcl_nbTopic > 0) {
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
for (int i = 0 ; i < lcl_nbTopic ; i++) {
lcl_topicsDatas = lcl_ctu.GetTopicDatas(i + 1);
lcl_ctu.ChangeTopicData(lcl_topicsDatas,0,"1");
lcl_topicsDatas[0] = "1";
glb_vectTopicsList.setElementAt(lcl_topicsDatas,i);
glb_vectTopicsHtmlList.set(i,CreateHtmlLine(i));
}
lcl_ctu.SaveTopicsDatas();
UpdateList();
}
}
public void UpdateList() {
try {
DefaultHtmlList();
setText(CreateHtmlList());
setEditable(false);
setEditorKit(glb_kit);
setDocument(glb_doc);
setContentType("text/html");
}
catch(Exception prm_exc) {/* bug pb maj JTextPane ? à résoudre...*/}
}
public void hyperlinkUpdate(HyperlinkEvent prm_ev) {
Defines.eventMouseIsActivated = true;
String lcl_description = prm_ev.getDescription();
if (prm_ev.getEventType() == HyperlinkEvent.EventType.ENTERED) {
if (ParamatersColAndLigIsOk(lcl_description)==true) {
int[] lcl_param = new int[3];
lcl_param = GetParametersColAndLig(lcl_description);
if (glb_vectTopicsHtmlList.size() > lcl_param[1]) {
glb_vectTopicsHtmlList.set(lcl_param[1],CreateHtmlLine(lcl_param[1],lcl_param[2]));
setText(CreateHtmlList(lcl_param[1],lcl_param[2]));
}
}
if (lcl_description.equals("add")) {
glb_htmlDataAdd = true;
setText(CreateHtmlList());
}
}
if (prm_ev.getEventType() == HyperlinkEvent.EventType.EXITED) {
if (ParamatersColAndLigIsOk(lcl_description)) {
int[] lcl_param = new int[3];
lcl_param = GetParametersColAndLig(lcl_description);
if (glb_vectTopicsHtmlList.size() > lcl_param[1]) {
glb_vectTopicsHtmlList.set(lcl_param[1],CreateHtmlLine(lcl_param[1]));
setText(CreateHtmlList());
}
}
if (lcl_description.equals("add")) {
glb_htmlDataAdd = false;
setText(CreateHtmlList());
}
}
if (prm_ev.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (lcl_description.equals("add")) {
AddTopic();
DefaultHtmlList();
glb_htmlDataAdd = false;
setText(CreateHtmlList());
}
else {
if (ParamatersColAndLigIsOk(lcl_description)) {
setText("");
int[] lcl_param = new int[3];
lcl_param = GetParametersColAndLig(lcl_description);
HyperlinkEvent(lcl_param[1],lcl_param[2]);
DefaultHtmlList();
setText(CreateHtmlList());
}
}
}
Defines.eventMouseIsActivated = false;
}
public void LoadTopics() {
glb_vectTopicsList.removeAllElements();
glb_vectTopicsHtmlList.removeAllElements();
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
int lcl_cptTopics = lcl_ctu.GetTotalTopic();
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
for (int i = 0 ; i < lcl_cptTopics ; i++) {
lcl_topicsDatas = lcl_ctu.GetTopicDatas(i+1);
glb_vectTopicsList.add(lcl_topicsDatas);
glb_vectTopicsHtmlList.add(CreateHtmlLine(i));
}
}
private void AddTopic() {
Defines.selectTopicIsInProgress = true;
SelectTopicUI lcl_st = new SelectTopicUI();
if (lcl_st.TopicIsSelected()) {
WebMemory lcl_wm = new WebMemory();
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
lcl_topicsDatas[0] = "1";
lcl_topicsDatas[1] = Integer.toString(lcl_st.GetCategorie());
lcl_topicsDatas[2] = lcl_wm.GetTopicValue(lcl_st.GetTopic());
lcl_topicsDatas[3] = lcl_wm.GetTopicMessage(lcl_st.GetTopic());
lcl_topicsDatas[4] = lcl_wm.GetTopicAnswer(lcl_st.GetTopic());
lcl_topicsDatas[5] = lcl_wm.GetTopicView(lcl_st.GetTopic());
lcl_topicsDatas[6] = lcl_wm.GetTopicAuthor(lcl_st.GetTopic());
lcl_topicsDatas[7] = lcl_wm.GetTopicAuthorAnswer(lcl_st.GetTopic());
glb_vectTopicsList.add(lcl_topicsDatas);
int lcl_line = glb_vectTopicsHtmlList.size();
String lcl_topicsHtmlDatas = new String();
lcl_topicsHtmlDatas = glb_htmlDatas_0[0][0]+lcl_line+glb_htmlDatas_0[0][1];
lcl_topicsHtmlDatas += glb_htmlDatas_1[0][0]+glb_htmlDatas_1[0][1]+""+glb_htmlDatas_1[0][2];
lcl_topicsHtmlDatas += glb_htmlDatas_2[0][0]+lcl_line+glb_htmlDatas_2[0][1]+lcl_topicsDatas[3]+glb_htmlDatas_2[0][2];
glb_vectTopicsHtmlList.add(lcl_topicsHtmlDatas);
lcl_ctu.AddTopicDatas(lcl_topicsDatas);
lcl_ctu.SaveTopicsDatas();
}
Defines.selectTopicIsInProgress = false;
}
private void HyperlinkEvent(int prm_lig,int prm_col) {
switch(prm_col) {
case 0: {
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
lcl_topicsDatas = lcl_ctu.GetTopicDatas(prm_lig + 1);
lcl_ctu.DelTopicDatas(lcl_topicsDatas);
lcl_ctu.SaveTopicsDatas();
glb_vectTopicsList.removeElementAt(prm_lig);
glb_vectTopicsHtmlList.removeElementAt(prm_lig);
break;
}
case 1: {
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
lcl_topicsDatas = lcl_ctu.GetTopicDatas(prm_lig + 1);
lcl_ctu.ChangeTopicData(lcl_topicsDatas,0,"1");
lcl_ctu.SaveTopicsDatas();
lcl_topicsDatas[0] = "1";
glb_vectTopicsList.setElementAt(lcl_topicsDatas,prm_lig);
glb_vectTopicsHtmlList.set(prm_lig,CreateHtmlLine(prm_lig));
break;
}
case 2: {
ConfigTopicsUpdates lcl_ctu = new ConfigTopicsUpdates();
lcl_ctu.LoadTopicsDatas();
String[] lcl_topicsDatas = new String[lcl_ctu.GetMaxTopicDatas()];
lcl_topicsDatas = lcl_ctu.GetTopicDatas(prm_lig + 1);
int lcl_categorie = Integer.parseInt(lcl_topicsDatas[1]) + 1;
int lcl_topicValue = Integer.parseInt(lcl_topicsDatas[2]);
String lcl_url;
try {
lcl_url = new WebConnectExtra().GetUrlTopicPage(lcl_categorie,lcl_topicValue);
if (!lcl_url.equals("")) {
lcl_topicsDatas[0] = "1";
new ExecProcess(lcl_url);
}
else {
lcl_topicsDatas[0] = "0";
}
}
catch (TrustException prm_ev) { prm_ev.Action(); }
lcl_ctu.ChangeTopicData(lcl_topicsDatas,0,lcl_topicsDatas[0]);
lcl_ctu.SaveTopicsDatas();
glb_vectTopicsList.setElementAt(lcl_topicsDatas,prm_lig);
glb_vectTopicsHtmlList.set(prm_lig,CreateHtmlLine(prm_lig));
}
}
}
private void DefaultHtmlList() {
for (int i = 0 ; i < glb_vectTopicsHtmlList.size() ; i++) {
glb_vectTopicsHtmlList.set(i,CreateHtmlLine(i));
}
}
private String CreateHtmlLine(int prm_lig) {
return(CreateHtmlLine(prm_lig,-1));
}
private String CreateHtmlList() {
return(CreateHtmlList(-1,-1));
}
private String CreateHtmlLine(int prm_lig,int prm_colSelect) {
String lcl_htmlLine = new String();
int lcl_topicState = Integer.parseInt(GetDataTopicsList(prm_lig,0));
switch(prm_colSelect) {
case -1: {
lcl_htmlLine = glb_htmlDatas_0[0][0] + prm_lig + glb_htmlDatas_0[0][1];
if (lcl_topicState > 1)
lcl_htmlLine += glb_htmlDatas_1[1][0] + prm_lig + glb_htmlDatas_1[1][1] + (lcl_topicState-1) + glb_htmlDatas_1[1][2];
else
lcl_htmlLine += glb_htmlDatas_1[0][0] + glb_htmlDatas_1[0][1] + glb_htmlDatas_1[0][2];
switch(lcl_topicState) {
case 0: { lcl_htmlLine += glb_htmlDatas_2[2][0] + glb_htmlDatas_2[2][1] + GetDataTopicsList(prm_lig,3) + glb_htmlDatas_2[2][2]; break; }
case 1: { lcl_htmlLine += glb_htmlDatas_2[0][0] + prm_lig + glb_htmlDatas_2[0][1] + GetDataTopicsList(prm_lig,3) + glb_htmlDatas_2[0][2]; break; }
default: { lcl_htmlLine += glb_htmlDatas_2[1][0] + prm_lig + glb_htmlDatas_2[1][1] + GetDataTopicsList(prm_lig,3) + glb_htmlDatas_2[1][2]; }
}
break;
}
case 0: {
lcl_htmlLine = glb_htmlDatas_0[1][0]+prm_lig+glb_htmlDatas_0[1][1];
if (lcl_topicState > 1) {
lcl_htmlLine += glb_htmlDatas_1[1][0]+prm_lig+glb_htmlDatas_1[1][1] + (lcl_topicState-1) + glb_htmlDatas_1[1][2];
}
else {
lcl_htmlLine += glb_htmlDatas_1[0][0]+glb_htmlDatas_1[0][1]+glb_htmlDatas_1[0][2];
}
switch(lcl_topicState) {
case 0: { lcl_htmlLine += glb_htmlDatas_2[2][0]+glb_htmlDatas_2[2][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[2][2]; break; }
case 1: { lcl_htmlLine += glb_htmlDatas_2[0][0]+prm_lig+glb_htmlDatas_2[0][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[0][2]; break; }
default: { lcl_htmlLine += glb_htmlDatas_2[1][0]+prm_lig+glb_htmlDatas_2[1][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[1][2]; }
}
break;
}
case 1: {
lcl_htmlLine = glb_htmlDatas_0[0][0]+prm_lig+glb_htmlDatas_0[0][1];
if (lcl_topicState > 1) {
lcl_htmlLine += glb_htmlDatas_1[2][0]+prm_lig+glb_htmlDatas_1[2][1] + (lcl_topicState-1) + glb_htmlDatas_1[2][2];
}
else {
lcl_htmlLine += glb_htmlDatas_1[0][0]+glb_htmlDatas_1[0][1]+glb_htmlDatas_1[0][2];
}
switch(lcl_topicState) {
case 0: { lcl_htmlLine += glb_htmlDatas_2[2][0]+glb_htmlDatas_2[2][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[2][2]; break; }
case 1: { lcl_htmlLine += glb_htmlDatas_2[0][0]+prm_lig+glb_htmlDatas_2[0][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[0][2]; break; }
default: { lcl_htmlLine += glb_htmlDatas_2[1][0]+prm_lig+glb_htmlDatas_2[1][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[1][2]; }
}
break;
}
case 2: {
lcl_htmlLine = glb_htmlDatas_0[0][0]+prm_lig+glb_htmlDatas_0[0][1];
if (lcl_topicState > 1) {
lcl_htmlLine += glb_htmlDatas_1[1][0]+prm_lig+glb_htmlDatas_1[1][1] + (lcl_topicState-1) + glb_htmlDatas_1[1][2];
}
else {
lcl_htmlLine += glb_htmlDatas_1[0][0]+glb_htmlDatas_1[0][1]+glb_htmlDatas_1[0][2];
}
switch(lcl_topicState) {
case 0: { lcl_htmlLine += glb_htmlDatas_2[2][0]+glb_htmlDatas_2[2][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[2][2]; break; }
case 1: { lcl_htmlLine += glb_htmlDatas_2[4][0]+prm_lig+glb_htmlDatas_2[4][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[4][2]; break; }
default: { lcl_htmlLine += glb_htmlDatas_2[3][0]+prm_lig+glb_htmlDatas_2[3][1]+GetDataTopicsList(prm_lig,3)+glb_htmlDatas_2[3][2]; }
}
}
}
return(lcl_htmlLine);
}
private String CreateHtmlList(int prm_lig,int prm_col) {
String lcl_text = new String();
if (Defines.topicsUpdateIsInProgress) {
lcl_text = "<html><body>";
lcl_text += "<font face=\"helvetica\" color=\"green\" size=3><b>Recherche de nouveaux messages ...</b></font>";
lcl_text += "</body></html>";
return(lcl_text);
}
lcl_text = "<html><body>";
if (glb_vectTopicsHtmlList.size() > 0) {
lcl_text = "<table border=\"0\" cellpadding=\"0\">";
for (int i = 0 ; i < glb_vectTopicsHtmlList.size() ; i++) {
lcl_text += "<tr>";
lcl_text += (String)glb_vectTopicsHtmlList.elementAt(i);
lcl_text += "</tr>";
}
lcl_text += "</table>";
}
if (prm_col == 2) {
lcl_text += "<font face=\"helvetica\" color=\"#63619c\" size=2><b>";
lcl_text += new WebMemory().GetCategories(Integer.parseInt(GetDataTopicsList(prm_lig,1)))+" - ";
lcl_text += GetDataTopicsList(prm_lig,4)+"/"+GetDataTopicsList(prm_lig,5)+" - ";
lcl_text += GetDataTopicsList(prm_lig,6)+"/"+GetDataTopicsList(prm_lig,7);
lcl_text += "</b></font>";
}
else {
if (!(glb_vectTopicsList.size() >= Defines.MaxTopic)) {
if (glb_htmlDataAdd == false) {
lcl_text += "<font face=\"helvetica\" color=\"yellow\" size=3><a href=\"add\" style=\"text-decoration:none;\"><b>ADD</b></a></font>";
}
else {
lcl_text += "<font face=\"helvetica\" color=\"black\" bgcolor=\"yellow\" size=3><a href=\"add\" style=\"text-decoration:none;\"><b>ADD</b></a></font>";
}
}
}
lcl_text += "</body></html>";
return(lcl_text);
}
private void InitDatas() {
glb_htmlDatas_0[0][0] = "<td><font face=\"helvetica\" color=\"teal\" size=2><a href=\"col=0&lig=";
glb_htmlDatas_0[0][1] = "\" style=\"text-decoration:none;\"><b>DEL</b></a></font></td>";
glb_htmlDatas_0[1][0] = "<td><font face=\"helvetica\" color=black bgcolor=\"teal\" size=2><a href=\"col=0&lig=";
glb_htmlDatas_0[1][1] = "\" style=\"text-decoration:none;\"><b>DEL</b></a></font></td>";
glb_htmlDatas_1[0][0] = "<td width=\"35\" align=\"center\">";
glb_htmlDatas_1[0][1] = "";
glb_htmlDatas_1[0][2] = "</td>";
glb_htmlDatas_1[1][0] = "<td width=\"40\" align=\"center\"><font face=\"helvetica\" color=\"lime\" size=2><a href=\"col=1&lig=";
glb_htmlDatas_1[1][1] = "\" style=\"text-decoration:none;\"><b>+";
glb_htmlDatas_1[1][2] = "</b></a></font></td>";
glb_htmlDatas_1[2][0] = "<td width=\"40\" align=\"center\"><font face=\"helvetica\" color=\"black\" bgcolor=\"lime\" size=2><a href=\"col=1&lig=";
glb_htmlDatas_1[2][1] = "\" style=\"text-decoration:none;\">+";
glb_htmlDatas_1[2][2] = "</b></a></font></td>";
glb_htmlDatas_2[0][0] = "<td><font face=\"helvetica\" color=\"green\" size=2><a href=\"col=2&lig=";
glb_htmlDatas_2[0][1] = "\" style=\"text-decoration:none;\"><b>";
glb_htmlDatas_2[0][2] = "</b></a></font></td>";
glb_htmlDatas_2[1][0] = "<td><font face=\"helvetica\" color=\"white\" size=2><a href=\"col=2&lig=";
glb_htmlDatas_2[1][1] = "\" style=\"text-decoration:none;\"><b>";
glb_htmlDatas_2[1][2] = "</b></a></font></td>";
glb_htmlDatas_2[2][0] = "<td><font face=\"helvetica\" color=\"olive\" size=2>";
glb_htmlDatas_2[2][1] = "<strike>";
glb_htmlDatas_2[2][2] = "</strike></font></td>";
glb_htmlDatas_2[3][0] = "<td><font face=\"helvetica\" color=black bgcolor=\"white\" size=2><a href=\"col=2&lig=";
glb_htmlDatas_2[3][1] = "\" style=\"text-decoration:none;\"><b>";
glb_htmlDatas_2[3][2] = "</b></a></font></td>";
glb_htmlDatas_2[4][0] = "<td><font face=\"helvetica\" color=black bgcolor=\"green\" size=2><a href=\"col=2&lig=";
glb_htmlDatas_2[4][1] = "\" style=\"text-decoration:none;\"><b>";
glb_htmlDatas_2[4][2] = "</b></a></font></td>";
}
private boolean ParamatersColAndLigIsOk(String prm_description) {
int[] lcl_param = new int[3];
lcl_param = GetParametersColAndLig(prm_description);
if (lcl_param[0] == 0) return(false);
return(true);
}
private int[] GetParametersColAndLig(String prm_description) {
int[] lcl_param = new int[3];
try {
lcl_param[1] = Integer.parseInt(new WebParser().GetParameter(prm_description,"lig="));
lcl_param[2] = Integer.parseInt(new WebParser().GetParameter(prm_description,"col="));
lcl_param[0] = 1;
}
catch (NumberFormatException prm_nfe) {
lcl_param[0] = 0;
}
return(lcl_param);
}
private String GetDataTopicsList(int prm_lig,int prm_ind) {
return(((String[])glb_vectTopicsList.elementAt(prm_lig))[prm_ind]);
}
}