// Carnegie Mellon University
//   Information Networking Institute and
//   School of Computer Science
//
// Master Thesis: A Monitoring Tool for Overlay Network
// By: TungFai Chan and Annie Cheng
//
// File: InfoTextManager.java
// Path: userInterfaces/componentManager/
// Description: Management class for text pane and interact with database


package userInterfaces.componentManagers;

import eventbase.*;
import eventbase.event.*;
import userInterfaces.*;

import java.util.*;
import javax.swing.*;
import javax.swing.text.*;


public class InfoTextManager {

    MainScreen mainScreen = null;
    JTextPane infoTextPane = null;

    Document doc = null;


    public InfoTextManager(JTextPane textPane, MainScreen mScreen) {
        infoTextPane = textPane;
        mainScreen = mScreen;
        doc = textPane.getDocument();

        initTextStyle();
        clearAll();

    }

    public void updateInfoTextPane(EventTableEntry tableEntry) {

        try {
            doc.insertString(doc.getLength(),
                             "[" + mainScreen.toTimeString(tableEntry.getTime(), true) + "] ",
                             infoTextPane.getStyle("regular"));
            doc.insertString(doc.getLength(),
                             tableEntry.getEvent().getOutputString() + "\n",
                             infoTextPane.getStyle("regular"));
        }
        catch (BadLocationException e) {
            mainScreen.printConsoleError("InfoTextManager", "updateInfoTextPane",
                                         "BadLocationException", e);
        }

    }

    public void clearAll() {
        try {
            doc.remove(0, doc.getLength());
        }
        catch (BadLocationException e) {
            mainScreen.printConsoleError("InfoTextManager", "clearTextPane",
                                         "BadLocationException", e);
        }

    }

    private void initTextStyle() {

        Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
        Style regular = infoTextPane.addStyle("regular", def);
        StyleConstants.setFontSize(regular, 10);

        Style bold = infoTextPane.addStyle("bold", regular);
        StyleConstants.setBold(bold, true);

    }


}

