/* */ package NET.worlds.console; /* */ /* */ import java.awt.Component; /* */ import java.awt.Event; /* */ import java.io.BufferedReader; /* */ import java.io.File; /* */ import java.io.FileNotFoundException; /* */ import java.io.FileReader; /* */ import java.io.FileWriter; /* */ import java.io.IOException; /* */ import java.io.PrintStream; /* */ import java.io.PrintWriter; /* */ import java.text.DateFormat; /* */ import java.util.Date; /* */ import java.util.Observer; /* */ import javax.swing.JScrollPane; /* */ import javax.swing.JTextArea; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class ChatArea /* */ extends JScrollPane /* */ implements SharedTextArea /* */ { /* */ private static final long serialVersionUID = 1L; /* */ private JTextArea textArea; /* */ private static String sharedText; /* */ private boolean isShared; /* */ private String unsharedText; /* */ private String unaddedText; /* */ private boolean haveFocus; /* */ private PrintWriter logFile; /* */ private String logFileName; /* */ private static final long oneMeg = 1048576L; /* */ private static final long logLengthLimit = 524288L; /* */ /* */ public ChatArea(int rows, int cols, boolean isShared) /* */ { /* 86 */ this.textArea = new JTextArea(rows, cols); /* */ /* 88 */ this.isShared = isShared; /* 89 */ this.textArea.setEditable(false); /* */ /* 91 */ setViewportView(this.textArea); /* 92 */ super.setHorizontalScrollBarPolicy(31); /* 93 */ super.setVerticalScrollBarPolicy(20); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public Component getComponent() /* */ { /* 109 */ return this; /* */ } /* */ /* */ public void finalize() /* */ { /* 114 */ disableLogging(); /* */ } /* */ /* */ /* */ public synchronized void validate() /* */ { /* 120 */ super.validate(); /* 121 */ String text = this.isShared ? sharedText : this.unsharedText; /* 122 */ if (text != null) { /* 123 */ this.textArea.replaceRange("", 0, this.textArea.getText().length()); /* 124 */ this.textArea.append(text); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void enableLogging(String fileName, String title, boolean append) /* */ { /* 140 */ if (this.logFile != null) /* */ { /* 142 */ if (this.logFileName.equals(fileName)) { /* 143 */ return; /* */ } /* 145 */ this.logFile.close(); /* */ } /* */ try { /* 148 */ if ((append) && (new File(fileName).exists())) { /* 149 */ truncateIfExceeds(fileName, title, 524288L); /* 150 */ this.logFile = new PrintWriter(new FileWriter(fileName, true)); /* */ } else { /* 152 */ this.logFile = new PrintWriter(new FileWriter(fileName, false)); /* 153 */ obsLogFile.setChanged(true); /* 154 */ this.logFile.println(""); /* 155 */ this.logFile.println(""); /* 156 */ this.logFile.println("" + title + ""); /* 157 */ this.logFile.println(""); /* 158 */ this.logFile.println(""); /* */ } /* 160 */ this.logFileName = fileName; /* 161 */ this.logFile.println("
"); /* 162 */ this.logFile.println("

Conversation of " + /* 163 */ DateFormat.getDateTimeInstance().format(new Date()) + /* 164 */ "

"); /* */ /* 166 */ this.logFile.flush(); /* 167 */ obsLogFile.notifyObservers(this); /* */ } catch (IOException ex) { /* 169 */ System.out.println("Log file not opened: " + ex); /* */ } /* */ } /* */ /* */ /* */ /* 175 */ private static PublicObservable obsLogFile = new PublicObservable(); /* */ /* */ /* */ /* */ /* */ /* */ public static void addLogObserver(Observer o) /* */ { /* 183 */ obsLogFile.addObserver(o); /* */ } /* */ /* */ /* */ /* */ public static void deleteLogObserver(Observer o) /* */ { /* 190 */ obsLogFile.deleteObserver(o); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ private synchronized void truncateIfExceeds(String fileName, String title, long lengthLimit) /* */ { /* 203 */ File f = new File(fileName); /* 204 */ if (f.length() > lengthLimit) { /* 205 */ File tf = new File(fileName + ".temp"); /* */ /* */ try /* */ { /* 209 */ BufferedReader in = new BufferedReader(new FileReader(f)); /* 210 */ PrintWriter out = new PrintWriter(new FileWriter(tf)); /* 211 */ out.println(""); /* 212 */ out.println(""); /* 213 */ out.println("" + title + ""); /* 214 */ out.println(""); /* 215 */ out.println(""); /* 216 */ in.skip(f.length() - lengthLimit / 2L); /* 217 */ String line = in.readLine(); /* 218 */ line = in.readLine(); /* 219 */ while (line != null) { /* 220 */ out.println(line); /* 221 */ line = in.readLine(); /* */ } /* 223 */ in.close(); /* 224 */ out.close(); /* */ /* */ /* 227 */ f.delete(); /* 228 */ f = new File(fileName); /* 229 */ tf.renameTo(f); /* */ } catch (FileNotFoundException ex) { /* 231 */ System.out.println("DuplexPart fatal: " + ex); /* */ } catch (IOException ex) { /* 233 */ System.out.println("DuplexPart: Unable to write, " + ex); /* */ } /* */ } /* */ } /* */ /* */ /* */ /* */ public synchronized void disableLogging() /* */ { /* 242 */ if (this.logFile != null) { /* 243 */ this.logFile.close(); /* 244 */ this.logFile = null; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public boolean canAddText() /* */ { /* 255 */ if (!this.haveFocus) { /* 256 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 293 */ return false; /* */ } /* */ /* */ /* */ /* */ private String toHtml(String s) /* */ { /* 300 */ assert (s != null); /* 301 */ String h = ""; /* 302 */ for (int i = 0; i < s.length(); i++) { /* 303 */ char c = s.charAt(i); /* 304 */ switch (c) { /* */ case '<': /* 306 */ h = h + "<"; /* 307 */ break; /* */ case '>': /* 309 */ h = h + ">"; /* 310 */ break; /* */ case '"': /* 312 */ h = h + """; /* 313 */ break; /* */ case '&': /* 315 */ h = h + "&"; /* 316 */ break; /* */ default: /* 318 */ h = h + c; /* */ } /* */ /* */ } /* 322 */ return h; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void println(String msg) /* */ { /* 334 */ if ((this.logFile != null) && (msg != null)) { /* 335 */ this.logFile.println(toHtml(msg) + "
"); /* 336 */ this.logFile.flush(); /* */ } /* */ /* */ /* */ /* */ /* 342 */ if (this.unaddedText == null) { /* 343 */ this.unaddedText = msg; /* 344 */ } else if (msg != null) { /* 345 */ this.unaddedText = (this.unaddedText + "\n" + msg); /* */ } /* 347 */ if ((this.unaddedText == null) || (!canAddText())) { /* 348 */ return; /* */ } /* 350 */ if (this.textArea.getText().length() == 0) { /* 351 */ this.textArea.append(this.unaddedText); /* */ } else /* 353 */ this.textArea.append("\n" + this.unaddedText); /* 354 */ this.unaddedText = null; /* */ /* */ /* 357 */ String text = this.textArea.getText(); /* 358 */ if (text.length() > 20000) { /* 359 */ int linePos = text.indexOf('\n', 10240); /* 360 */ if (linePos >= 0) { /* 361 */ text = text.substring(linePos + 1); /* */ /* */ /* 364 */ linePos = text.lastIndexOf('\n'); /* 365 */ if (linePos > 0) { /* 366 */ this.textArea.setText(text.substring(0, linePos)); /* 367 */ this.textArea.append(text.substring(linePos)); /* */ } /* */ } /* */ } /* */ /* 372 */ if (this.isShared) { /* 373 */ sharedText = text; /* */ } else { /* 375 */ this.unsharedText = text; /* */ } /* */ } /* */ /* */ public synchronized void scrollToBottom() { /* 380 */ String text = this.textArea.getText(); /* 381 */ int textlen = text.length(); /* 382 */ this.textArea.select(textlen, textlen); /* */ } /* */ /* */ /* */ /* */ @Deprecated /* */ public synchronized boolean handleEvent(Event event) /* */ { /* 390 */ if (event.id == 1004) { /* 391 */ this.haveFocus = true; /* 392 */ } else if (event.id == 1005) /* */ { /* 394 */ this.haveFocus = false; /* */ } /* */ /* 397 */ poll(); /* */ /* 399 */ return super.handleEvent(event); /* */ } /* */ /* */ public void poll() /* */ { /* 404 */ if (this.unaddedText != null) { /* 405 */ println(null); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public boolean isFocusTraversable() /* */ { /* 415 */ return false; /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\console\ChatArea.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */