//# 0 errors, 107 messages
//#
/*
    //#HistoryWindow.java:1:1: class: com.dmdirc.addons.logging.HistoryWindow
    //#HistoryWindow.java:1:1: method: com.dmdirc.addons.logging.HistoryWindow.com.dmdirc.addons.logging.HistoryWindow__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.addons.logging;

import com.dmdirc.FrameContainer;
import com.dmdirc.Main;
import com.dmdirc.Server;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.ui.WindowManager;
import com.dmdirc.ui.interfaces.Window;

/**
 * Displays an extended history of a window.
 *
 * @author Chris
 */
public class HistoryWindow extends FrameContainer {
    
    /** The title of our window. */
    private final String title;
       
    /** The window we're using. */
    private Window window;
    
    /** Our parent window. */
    private Window parent;
    
    /**
     * Creates a new HistoryWindow.
     *
     * @param title The title of the window
     * @param reader The reader to use to get the history
     * @param parent The window this history window was opened from
     * @param numLines The number of lines to show
     */
    public HistoryWindow(final String title, final ReverseFileReader reader, 
            final Window parent, final int numLines) {
        super("raw", parent.getConfigManager());
    //#HistoryWindow.java:58: method: void com.dmdirc.addons.logging.HistoryWindow.com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#HistoryWindow.java:58: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.ui.interfaces.Window:getConfigManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: ConfigManager com.dmdirc.ui.interfaces.Window:getConfigManager()
    //#HistoryWindow.java:58: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer(String, ConfigManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: void com.dmdirc.FrameContainer(String, ConfigManager)
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com/dmdirc/addons/logging/ReverseFileReader.__Descendant_Table[com/dmdirc/addons/logging/ReverseFileReader]
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com/dmdirc/addons/logging/ReverseFileReader.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com/dmdirc/addons/logging/ReverseFileReader.__Dispatch_Table.getLinesAsString(I)Ljava/lang/String;
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com/dmdirc/addons/logging/ReverseFileReader.__Dispatch_Table.getNextLine()Ljava/lang/String;
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): numLines
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): parent
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): reader
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): reader.__Tag
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): reader.file
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): reader.seekLength
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this
    //#input(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): title
    //#output(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.parent
    //#output(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.title
    //#output(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.window
    //#pre[2] (void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): parent != null
    //#pre[3] (void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): reader != null
    //#pre[4] (void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): (soft) reader.__Tag == com/dmdirc/addons/logging/ReverseFileReader
    //#pre[5] (void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): (soft) reader.file != null
    //#pre[6] (void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): (soft) init'ed(reader.seekLength)
    //#presumption(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com.dmdirc.Main:getUI(...)@62 != null
    //#presumption(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@67 != null
    //#presumption(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): com.dmdirc.ui.interfaces.UIController:getWindow(...)@62 != null
    //#post(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.parent == parent
    //#post(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.parent != null
    //#post(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.title == title
    //#post(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): init'ed(this.title)
    //#post(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): this.window != null
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.io.RandomAccessFile:getFilePointer
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.io.RandomAccessFile:seek
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.io.RandomAccessFile:read
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.Byte:valueOf
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.util.ArrayList:add
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.util.ArrayList:size
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.util.ArrayList:get
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.Byte:byteValue
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.nio.charset.Charset:forName
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.String
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.StringBuilder:insert
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.StringBuilder:charAt
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.StringBuilder:deleteCharAt
    //#unanalyzed(void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)): Effects-of-calling:java.lang.StringBuilder:toString
        this.title = title;
        this.parent = parent;
        
        window = Main.getUI().getWindow(this);
    //#HistoryWindow.java:62: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#HistoryWindow.java:62: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.ui.interfaces.UIController:getWindow(FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: Window com.dmdirc.ui.interfaces.UIController:getWindow(FrameContainer)
        
        WindowManager.addWindow(parent, window);
    //#HistoryWindow.java:64: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addWindow(Window, Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addWindow(Window, Window)
        window.setTitle(title);
    //#HistoryWindow.java:65: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:setTitle(String)
        window.open();
    //#HistoryWindow.java:66: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:open()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:open()
        final int frameBufferSize = IdentityManager.getGlobalConfig().getOptionInt(
    //#HistoryWindow.java:67: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#HistoryWindow.java:67: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
                "ui", "frameBufferSize");
        window.addLine(reader.getLinesAsString(Math.min(frameBufferSize, numLines)), false);
    //#HistoryWindow.java:69: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:addLine(String, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:addLine(String, bool)
    }
    //#HistoryWindow.java:70: end of method: void com.dmdirc.addons.logging.HistoryWindow.com.dmdirc.addons.logging.HistoryWindow(String, ReverseFileReader, Window, int)
    
    /** {@inheritDoc} */
    @Override
    public Window getFrame() {
        return window;
    //#HistoryWindow.java:75: method: Window com.dmdirc.addons.logging.HistoryWindow.getFrame()
    //#input(Window getFrame()): this
    //#input(Window getFrame()): this.window
    //#output(Window getFrame()): return_value
    //#pre[2] (Window getFrame()): init'ed(this.window)
    //#post(Window getFrame()): return_value == this.window
    //#post(Window getFrame()): init'ed(return_value)
    //#HistoryWindow.java:75: end of method: Window com.dmdirc.addons.logging.HistoryWindow.getFrame()
    }
    
    /** {@inheritDoc} */
    @Override
    public String toString() {
        return title;
    //#HistoryWindow.java:81: method: String com.dmdirc.addons.logging.HistoryWindow.toString()
    //#input(String toString()): this
    //#input(String toString()): this.title
    //#output(String toString()): return_value
    //#post(String toString()): return_value == this.title
    //#post(String toString()): init'ed(return_value)
    //#HistoryWindow.java:81: end of method: String com.dmdirc.addons.logging.HistoryWindow.toString()
    }
    
    /** {@inheritDoc} */
    @Override
    public void windowClosing() {
        // 1: Make the window non-visible
        window.setVisible(false);
    //#HistoryWindow.java:88: method: void com.dmdirc.addons.logging.HistoryWindow.windowClosing()
    //#HistoryWindow.java:88: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:setVisible(bool)
    //#input(void windowClosing()): this
    //#input(void windowClosing()): this.window
    //#output(void windowClosing()): this.parent
    //#output(void windowClosing()): this.window
    //#pre[1] (void windowClosing()): this.window != null
    //#post(void windowClosing()): this.parent == null
    //#post(void windowClosing()): this.window == null
        
        // 2: Remove any callbacks or listeners
        // 3: Trigger any actions neccessary
        // 4: Trigger action for the window closing
        // 5: Inform any parents that the window is closing
        
        // 6: Remove the window from the window manager
        WindowManager.removeWindow(window);
    //#HistoryWindow.java:96: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:removeWindow(Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:removeWindow(Window)
        
        // 7: Remove any references to the window and parents
        window = null; // NOPMD
        parent = null; // NOPMD
    }
    //#HistoryWindow.java:101: end of method: void com.dmdirc.addons.logging.HistoryWindow.windowClosing()
    
    /** {@inheritDoc} */
    @Override
    public Server getServer() {
        return parent == null ? null : parent.getContainer().getServer();
    //#HistoryWindow.java:106: method: Server com.dmdirc.addons.logging.HistoryWindow.getServer()
    //#HistoryWindow.java:106: Warning: method not available - call not analyzed
    //#    call on FrameContainer com.dmdirc.ui.interfaces.Window:getContainer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: Server getServer()
    //#    unanalyzed callee: FrameContainer com.dmdirc.ui.interfaces.Window:getContainer()
    //#HistoryWindow.java:106: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.FrameContainer:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.logging.HistoryWindow
    //#    method: Server getServer()
    //#    unanalyzed callee: Server com.dmdirc.FrameContainer:getServer()
    //#input(Server getServer()): this
    //#input(Server getServer()): this.parent
    //#output(Server getServer()): return_value
    //#pre[2] (Server getServer()): init'ed(this.parent)
    //#presumption(Server getServer()): com.dmdirc.ui.interfaces.Window:getContainer(...)@106 != null
    //#post(Server getServer()): init'ed(return_value)
    //#HistoryWindow.java:106: end of method: Server com.dmdirc.addons.logging.HistoryWindow.getServer()
    }

}
    //#output(com.dmdirc.addons.logging.HistoryWindow__static_init): __Descendant_Table[com/dmdirc/addons/logging/HistoryWindow]
    //#output(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.windowClosing()V
    //#post(com.dmdirc.addons.logging.HistoryWindow__static_init): __Descendant_Table[com/dmdirc/addons/logging/HistoryWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &getFrame
    //#post(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &getServer
    //#post(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(com.dmdirc.addons.logging.HistoryWindow__static_init): __Dispatch_Table.windowClosing()V == &windowClosing
    //#HistoryWindow.java:: end of method: com.dmdirc.addons.logging.HistoryWindow.com.dmdirc.addons.logging.HistoryWindow__static_init
    //#HistoryWindow.java:: end of class: com.dmdirc.addons.logging.HistoryWindow
