diff --git a/logs/.gitignore b/logs/.gitignore deleted file mode 100644 index 7ef92ce..0000000 --- a/logs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.log -*.bak diff --git a/logs/README.md b/logs/README.md deleted file mode 100644 index d5aa0d6..0000000 --- a/logs/README.md +++ /dev/null @@ -1 +0,0 @@ -Logs from the production build will be saved here. \ No newline at end of file diff --git a/mirror-logging/include/mirror/logger.hpp b/mirror-logging/include/mirror/logger.hpp index 4de3b18..030dd43 100644 --- a/mirror-logging/include/mirror/logger.hpp +++ b/mirror-logging/include/mirror/logger.hpp @@ -5,16 +5,9 @@ #include #include -// Library Includes -#include namespace mirror { - /** - * Context for the connection to the log server. Defined in `logger.cpp` - */ - extern zmq::context_t socketContext; - /** * Singleton class to be used when logging in projects associated with the Clarkson Open Source Institute's Mirror */ @@ -92,41 +85,30 @@ namespace mirror { // Configuration /** - * Configures the connection to the log server - * - * **Must be called before any log messages can be sent** - * - * @param port Port that the log server is running on + * Must be called before any log messages can be sent. * @param componentName Name of the component that the logger is being used in - * @param address IP address of the machine that the log server is running on */ - void configure(uint16_t port, const std::string &componentName, const std::string &address = "localhost"); + void configure(const std::string &componentName); /** - * Shuts down the socket and destroys the Logger. + * Destroys the Logger. */ inline void close() { Logger::getInstance()->~Logger(); } + + protected: // Functions /** * Default constructor. */ inline Logger() : m_Configured(false) {} - // Destructor /** - * Destructor for the Logger class. Destroys the socket and context when called. + * Destructor for the Logger class. */ - inline ~Logger() { m_LogServerSocket.close(); socketContext.shutdown(); } + inline ~Logger() {} private: // Functions - /** - * Sends a line of text to the log server - * - * @param lineToSend Message to send to the log server - */ - void f_SendLine(const std::string &lineToSend); - /** * Prints a log event to stdout. * @param level_tag Level tag ( ex. [ DEBUG ] ) to prepend message with @@ -145,16 +127,6 @@ namespace mirror { */ static std::mutex s_AccessMutex; - /** - * Socket used to communicate with the log server - */ - zmq::socket_t m_LogServerSocket{socketContext, zmq::socket_type::stream}; - - /** - * URL of the log server - */ - std::string m_URL; - /** * False until `configure()` is run. * @@ -163,7 +135,7 @@ namespace mirror { bool m_Configured; /** - * Name of the component this class is instantiated in. Sent to the log server with each log message + * Name of the component this class is instantiated in. Included in log messages */ std::string m_ComponentName; diff --git a/mirror-logging/java/Log.java b/mirror-logging/java/Log.java index df5ca6e..f04b5e7 100644 --- a/mirror-logging/java/Log.java +++ b/mirror-logging/java/Log.java @@ -1,7 +1,4 @@ import java.io.IOException; -import java.io.OutputStream; -import java.net.Socket; -import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; @@ -18,11 +15,7 @@ public class Log { private static final String LOG_FATAL = " \u001B[31m[ FATAL ]\u001B[0m "; private static Log instance = null; - private String log_host = ""; - private int log_port = 0; private String component_name = ""; - Socket socket; - OutputStream clientOut; boolean configured; /** @@ -45,19 +38,8 @@ public static synchronized Log getInstance() { * @param log_port Log server port (ex. 4001) */ public synchronized void configure(String log_host, int log_port, String component_name) { - try { - this.log_host = log_host; - this.log_port = log_port; - this.component_name = component_name; - socket = new Socket(log_host, log_port); - clientOut = socket.getOutputStream(); - configured = true; - printToConsole(Levels.INFO, "Logger - Connected to log server."); - } catch(IOException e) { - configured = false; - printToConsole(Levels.ERROR, "Logger - Could not connect to log server."); - printToConsole(Levels.WARN, "Logger - Running in offline mode."); - } + this.component_name = component_name; + configured = true; } /** @@ -70,7 +52,7 @@ public synchronized void configure(String log_host, int log_port, String compone * Debug log events are not sent to the log server. * @param message Message to log */ - public void debug(String message) { printToConsole(Levels.DEBUG, message); } + public void debug(String message) { print(Levels.DEBUG, message); } /** * Logs an event with severity "INFO". @@ -102,34 +84,6 @@ public synchronized void configure(String log_host, int log_port, String compone * @param message Message to log */ private synchronized void print(Levels level, String message) { - printToConsole(level, message); - if(configured) { - StringBuilder sb = new StringBuilder(); - sb.append("@").append(component_name).append("@"); - sb.append(level.ordinal()).append(message).append("\n"); - try { - clientOut.write(sb.toString().getBytes(StandardCharsets.UTF_8)); - clientOut.flush(); - } catch (IOException e) { - printToConsole(Levels.INFO, "Logger - Reconnecting to log server..."); - try { - socket = new Socket(log_host, log_port); - clientOut = socket.getOutputStream(); - clientOut.write(sb.toString().getBytes(StandardCharsets.UTF_8)); - clientOut.flush(); - } catch(IOException f) { - printToConsole(Levels.ERROR, "Logger - Could not reconnect to log server."); - } - } - } - } - - /** - * Prints a log event to the console. - * @param level Severity of the log event - * @param message Message to log - */ - private void printToConsole(Levels level, String message) { StringBuilder sb = new StringBuilder(); sb.append(LOG_DATE_FORMAT.format(new Date())); switch(level.ordinal()) { diff --git a/mirror-logging/src/logger.cpp b/mirror-logging/src/logger.cpp index 38fb532..33d3f79 100644 --- a/mirror-logging/src/logger.cpp +++ b/mirror-logging/src/logger.cpp @@ -8,13 +8,8 @@ #include #include -// Library includes -#include - namespace mirror { - zmq::context_t socketContext(1, 1); - // Static Member Initializations Logger *Logger::s_Instance = nullptr; std::mutex Logger::s_AccessMutex; @@ -62,13 +57,9 @@ namespace mirror { printEvent(" \u001B[31m[ FATAL ]\u001B[0m ", logMessage); } - void Logger::configure(uint16_t port, const std::string &componentName, const std::string &address) { + void Logger::configure(const std::string &componentName) { std::lock_guard instanceLock(s_AccessMutex); - m_URL = "tcp://" + address + ":" + std::to_string(port); - m_LogServerSocket.connect(m_URL); - - m_ComponentName = componentName; m_Configured = true; } @@ -77,21 +68,6 @@ namespace mirror { * Start Of Private Functions */ - void Logger::f_SendLine(const std::string &lineToSend) { - std::lock_guard instanceGuard(s_AccessMutex); - - // Throws exception if logger is not configured. Should cause the program to end - if (!m_Configured) - throw std::logic_error("Logger not configured"); - - // Routing ID required for sending TCP messages, not part of the packet by default - std::string routingID = m_LogServerSocket.get(zmq::sockopt::routing_id); - m_LogServerSocket.send(zmq::message_t(routingID), zmq::send_flags::sndmore); - - zmq::message_t message{"@" + m_ComponentName + lineToSend + "\n"}; - m_LogServerSocket.send(message, zmq::send_flags::none); - } - void Logger::printEvent(const char* level_tag, const std::string &message) { std::time_t now = std::time(nullptr); auto time = *std::localtime(&now); diff --git a/mirror-map/src/main/java/mirrormap/log/Log.java b/mirror-map/src/main/java/mirrormap/log/Log.java index a67f8f5..67a8496 100644 --- a/mirror-map/src/main/java/mirrormap/log/Log.java +++ b/mirror-map/src/main/java/mirrormap/log/Log.java @@ -1,9 +1,4 @@ -package mirrormap.log; - import java.io.IOException; -import java.io.OutputStream; -import java.net.Socket; -import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; @@ -20,11 +15,7 @@ public class Log { private static final String LOG_FATAL = " \u001B[31m[ FATAL ]\u001B[0m "; private static Log instance = null; - private String log_host = ""; - private int log_port = 0; private String component_name = ""; - Socket socket; - OutputStream clientOut; boolean configured; /** @@ -43,23 +34,11 @@ public static synchronized Log getInstance() { /** * Configures and connects this instance of Log to the log server - * @param log_host Log server hostname (ex. "mirrorlog" or "localhost") - * @param log_port Log server port (ex. 4001) + * @param component_name This component's name */ - public synchronized void configure(String log_host, int log_port, String component_name) { - try { - this.log_host = log_host; - this.log_port = log_port; - this.component_name = component_name; - socket = new Socket(log_host, log_port); - clientOut = socket.getOutputStream(); - configured = true; - printToConsole(Levels.INFO, "Logger - Connected to log server."); - } catch(IOException e) { - configured = false; - printToConsole(Levels.ERROR, "Logger - Could not connect to log server."); - printToConsole(Levels.WARN, "Logger - Running in offline mode."); - } + public synchronized void configure(String component_name) { + this.component_name = component_name; + configured = true; } /** @@ -69,10 +48,9 @@ public synchronized void configure(String log_host, int log_port, String compone /** * Logs an event with severity "DEBUG". - * Debug log events are not sent to the log server. * @param message Message to log */ - public void debug(String message) { printToConsole(Levels.DEBUG, message); } + public void debug(String message) { print(Levels.DEBUG, message); } /** * Logs an event with severity "INFO". @@ -104,34 +82,6 @@ public synchronized void configure(String log_host, int log_port, String compone * @param message Message to log */ private synchronized void print(Levels level, String message) { - printToConsole(level, message); - if(configured) { - StringBuilder sb = new StringBuilder(); - sb.append("@").append(component_name).append("@"); - sb.append(level.ordinal()).append(message).append("\n"); - try { - clientOut.write(sb.toString().getBytes(StandardCharsets.UTF_8)); - clientOut.flush(); - } catch (IOException e) { - printToConsole(Levels.INFO, "Logger - Reconnecting to log server..."); - try { - socket = new Socket(log_host, log_port); - clientOut = socket.getOutputStream(); - clientOut.write(sb.toString().getBytes(StandardCharsets.UTF_8)); - clientOut.flush(); - } catch(IOException f) { - printToConsole(Levels.ERROR, "Logger - Could not reconnect to log server."); - } - } - } - } - - /** - * Prints a log event to the console. - * @param level Severity of the log event - * @param message Message to log - */ - private void printToConsole(Levels level, String message) { StringBuilder sb = new StringBuilder(); sb.append(LOG_DATE_FORMAT.format(new Date())); switch(level.ordinal()) { @@ -146,4 +96,4 @@ private void printToConsole(Levels level, String message) { sb.append(": ").append(message); System.out.println(sb); } -} \ No newline at end of file +} diff --git a/mirror-map/src/main/java/mirrormap/main/MirrorMapApplication.java b/mirror-map/src/main/java/mirrormap/main/MirrorMapApplication.java index ba1fa1e..b5a6195 100644 --- a/mirror-map/src/main/java/mirrormap/main/MirrorMapApplication.java +++ b/mirror-map/src/main/java/mirrormap/main/MirrorMapApplication.java @@ -22,7 +22,7 @@ public class MirrorMapApplication { public static void main(String[] args){ // Configure logging Log log = Log.getInstance(); - log.configure("mirrorlog", 4001, "Map"); + log.configure("Map"); try (ZContext context = new ZContext()) { // Start GeoIP database updater diff --git a/mirrorlog/.gitattributes b/mirrorlog/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/mirrorlog/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/mirrorlog/.gitignore b/mirrorlog/.gitignore deleted file mode 100644 index 3c3b6be..0000000 --- a/mirrorlog/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.idea/* -target/* -logs/* -test.yml -.vscode/* diff --git a/mirrorlog/Dockerfile b/mirrorlog/Dockerfile deleted file mode 100644 index 8d4157e..0000000 --- a/mirrorlog/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM eclipse-temurin:21 as builder -RUN apt update && apt upgrade -y && apt install -y maven -WORKDIR /mirror -COPY ./src /mirror/src -COPY ./pom.xml /mirror/pom.xml -RUN mvn clean package - -FROM eclipse-temurin:21 -EXPOSE 4001 -WORKDIR /mirror -COPY --from=builder /mirror/target/mirrorlog-*.jar ./mirrorlog.jar -RUN chmod 744 mirrorlog.jar - -ENTRYPOINT ["java", "-jar", "/mirror/mirrorlog.jar"] diff --git a/mirrorlog/LICENSE b/mirrorlog/LICENSE deleted file mode 100644 index 1494c79..0000000 --- a/mirrorlog/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Juno Meifert - -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. diff --git a/mirrorlog/Makefile b/mirrorlog/Makefile deleted file mode 100644 index 1e768ea..0000000 --- a/mirrorlog/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -all: build_jar build_container run - -build_jar: - mvn -f pom.xml clean install package - -build_container: - docker compose build - -run: - docker compose up --detach - -clean: - docker image prune - -attach: - docker container exec -it mirrorlog /bin/bash - -show-logs: - docker logs mirrorlog - -initial-setup: - mkdir logs \ No newline at end of file diff --git a/mirrorlog/README.md b/mirrorlog/README.md deleted file mode 100644 index ff494b2..0000000 --- a/mirrorlog/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# mirrorlog - -A customizable, multithreaded log server that provides a lot of functionality in a very small package. - -## Features - - Logging to console and timestamped log files - - Client-set component names to make searching logs easy - - Simple stateless protocol, server is easy to talk to with many programming languages - - Configurable duration of each log file - - Automatic cleaning of old logs, configurable history length - - Configurable firewall to block unknown IP addresses - - Managed output queue for smaller response delays - -## Configuration -MirrorLog's configuration is stored in the file "mirrorlog.conf.yml" - -You can customize the following: - - The size of the server thread pool - - The port that the server listens on - - The timeout for inactive clients - - Enable/disable a firewall that rejects unknown clients - - The list of IP addresses of known clients to allow - - The length that log component names are padded to - - The amount of time that one log file represents - - The number of old log files that are kept - -## Usage -To start the server, just run `mirrorlog.jar`. - -The server uses a persistent TCP socket. No special action is needed when connecting or disconnecting. - -To submit a log event to the server, send it the string `@Component@SeverityMessage\n` -where Component is the name of the component logging the message, Severity is a number from 0 to 3, -and Message is the messaged to be logged. For example, the component "MyComponent" logging -a message with severity 0 (INFO) would send the following: - -`@MyComponent@0This is an example log event.\n` - -This will log an event with severity 0 (Info), which looks like this: - -`2023-10-16 10:30:04 [ INFO ] MyComponent : This is an example log event.` - -To submit a log event with a different severity, change the 0 to 1, 2, or 3 for -WARN, ERROR, or FATAL respectively. - -Examples: - -`@MyComponent@0My Event\n` -> `2023-10-16 10:30:05 [ INFO ] MyComponent : My Event` - -`@MyComponent@1My Event\n` -> `2023-10-16 10:30:06 [ WARN ] MyComponent : My Event` - -`@MyComponent@2My Event\n` -> `2023-10-16 10:30:07 [ ERROR ] MyComponent : My Event` - -`@MyComponent@3My Event\n` -> `2023-10-16 10:30:08 [ FATAL ] MyComponent : My Event` - -When you log an event to the server, it will echo your input to acknowledge that it has received it. -Incoming events are queued, so you should receive a response from the server quickly, even if it is under load. - -Logs will look best when component names are shorter than the length that they are specified to be padded to in the -configuration file. A properly configured log with good component names will look like the following: - -``` -2023-10-16 10:30:05 [ INFO ] Website : Opening connection to "127.0.0.1". -2023-10-16 10:30:07 [ INFO ] Website : GET /login.html 200 OK -2023-10-16 10:30:08 [ INFO ] AccessControl : Starting session for user "856947126". -2023-10-16 10:30:10 [ WARN ] AccessControl : 4 blank parameters found in profile for user "856947126". -2023-10-16 10:30:10 [ ERROR ] Website : GET /admin.html 403 FORBIDDEN -``` - -You can tinker with the server easily using `telnet` (all communication will be human-readable). - -## Licensing -MirrorLog is Free & Open Source Software, and is released under the MIT license. (See `LICENSE`) - diff --git a/mirrorlog/configs/README.md b/mirrorlog/configs/README.md deleted file mode 100644 index 5dbcabf..0000000 --- a/mirrorlog/configs/README.md +++ /dev/null @@ -1 +0,0 @@ -Development configs for mirrorlog will be stored here. \ No newline at end of file diff --git a/mirrorlog/configs/config-instructions.txt b/mirrorlog/configs/config-instructions.txt deleted file mode 100644 index d118e3d..0000000 --- a/mirrorlog/configs/config-instructions.txt +++ /dev/null @@ -1,38 +0,0 @@ ---- Instructions for configuring MirrorLog --- -MirrorLog's configuration is stored in "config/mirrorlog.conf.json". -Available configuration options are listed below: - -"server": - "threads" (int): - - How many connections should the server be able to simultaneously handle? - - Having a lot of threads will slightly increase resource usage, but - having too few threads will cause connections to be rejected. - - "port" (int): - - Which port should the server listen on? - - "timeout" (int): - - How long should the server wait before disconnecting inactive clients? (integer) - - This duration is measured in milliseconds. (15 min is 900000 ms) - - Note that if a client disconnects or a socket error occurs, the connection - will be automatically terminated, so this only handles inactive clients. - - "restricted" (boolean): - - Should the server ignore requests from unknown addresses? - - "allowed_addresses" (list of strings): - - If 'restricted' is true, which addresses should we allow connections from? - -"output": - "component_pad" (int): - - What length should component names be padded up to? - - This makes the log more readable, provided most component names are under this length. - - "log_to_file" (boolean): - - Should the server log to files as well as the console? - - "file_duration" (int): - - How often (in hours) should the server create a new log file? - - "file_history" (int): - - How many old log files should the server retain? diff --git a/mirrorlog/configs/mirrorlog.conf.json b/mirrorlog/configs/mirrorlog.conf.json deleted file mode 100644 index 4c2a92b..0000000 --- a/mirrorlog/configs/mirrorlog.conf.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "revision": 0, - "server": { - "threads": 32, - "port": 4001, - "timeout": 1800000, - "restricted": false, - "allowed_addresses": [ - "127.0.0.1" - ] - }, - "output": { - "component_pad": 24, - "log_to_file": true, - "file_duration": 24, - "file_history": 10 - } -} diff --git a/mirrorlog/docs/index.md b/mirrorlog/docs/index.md deleted file mode 100644 index f126803..0000000 --- a/mirrorlog/docs/index.md +++ /dev/null @@ -1,80 +0,0 @@ -# mirrorlog - -A customizable, multithreaded log server that provides a lot of functionality in a very small package. - -[Source Code](https://github.com/lavajuno/mirrorlog) - -[Releases](https://github.com/lavajuno/mirrorlog/releases) - -[Documentation](docs/jdoc/index.html) - - -## Features -- Logging to console and timestamped log files -- Client-set component names to make searching logs easy -- Incredibly simple protocol, server is easy to talk to with many programming languages -- Configurable duration of each log file -- Automatic cleaning of old logs, configurable history length -- Configurable firewall to block unknown IP addresses -- Managed output queue for smaller response delays - -## Configuration -MirrorLog's configuration is stored in the file "mirrorlog.conf.yml" - -You can customize the following: -- The size of the server thread pool -- The port that the server listens on -- The timeout for inactive clients -- Enable/disable a firewall that rejects unknown clients -- The list of IP addresses of known clients to allow -- The length that log component names are padded to -- The amount of time that one log file represents -- The number of old log files that are kept - -## Usage -To start the server, just run `mirrorlog.jar`. - -The server uses a persistent TCP socket. No special action is needed when connecting or disconnecting. - -To submit a log event to the server, send it the string `@Component@SeverityMessage\r\n` -where Component is the name of the component logging the message, Severity is a number from 0 to 3, -and Message is the messaged to be logged. For example, the component "MyComponent" logging -a message with severity 0 (INFO) would send the following: - -`@MyComponent@0This is an example log event.\r\n` - -This will log an event with severity 0 (Info), which looks like this: - -`2023-10-16 10:30:04 [ INFO ] MyComponent : This is an example log event.` - -To submit a log event with a different severity, change the 0 to 1, 2, or 3 for -WARN, ERROR, or FATAL respectively. - -Examples: - -`@MyComponent@0My Event\r\n` -> `2023-10-16 10:30:05 [ INFO ] MyComponent : My Event` - -`@MyComponent@1My Event\r\n` -> `2023-10-16 10:30:06 [ WARN ] MyComponent : My Event` - -`@MyComponent@2My Event\r\n` -> `2023-10-16 10:30:07 [ ERROR ] MyComponent : My Event` - -`@MyComponent@3My Event\r\n` -> `2023-10-16 10:30:08 [ FATAL ] MyComponent : My Event` - -When you log an event to the server, it will echo your input to acknowledge that it has received it. -Incoming events are queued, so you should receive a response from the server quickly, even if it is under load. - -Logs will look best when component names are shorter than the length that they are specified to be padded to in the configuration file. A properly configured log with good component names will look like the following: - -``` -2023-10-16 10:30:05 [ INFO ] Website : Opening connection to "127.0.0.1". -2023-10-16 10:30:07 [ INFO ] Website : GET /login.html 200 OK -2023-10-16 10:30:08 [ INFO ] AccessControl : Starting session for user "856947126". -2023-10-16 10:30:10 [ WARN ] AccessControl : 4 blank parameters found in profile for user "856947126". -2023-10-16 10:30:10 [ ERROR ] Website : GET /admin.html 403 FORBIDDEN -``` - -You can tinker with the server easily using `telnet` (all communication will be human-readable). - -## Licensing -MirrorLog is Free & Open Source Software, and is released under the MIT license. (See `LICENSE`) - diff --git a/mirrorlog/docs/jdoc/allclasses-index.html b/mirrorlog/docs/jdoc/allclasses-index.html deleted file mode 100644 index ffefcb7..0000000 --- a/mirrorlog/docs/jdoc/allclasses-index.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - -All Classes and Interfaces - - - - - - - - - - - - - - - -
- -
-
-
-

All Classes and Interfaces

-
-
-
Classes
-
-
Class
-
Description
- -
-
ApplicationConfig loads and stores the program configuration, and - provides functionality for retrieving configuration values.
-
- -
-
LogEvent stores a single log event and provides functionality to - convert it to a string to be printed to the console or a file.
-
- -
-
LogFile handles creating, writing to, and deleting log files for OutputController.
-
- -
-
The purpose of LogMap is to eliminate the presence of magic numbers in the program.
-
- -
-
MirrorLogApplication handles startup and shutdown of the server.
-
- -
-
OutputController queues log entries from multiple ServerThreads - and handles printing them to the console as well as writing them to files.
-
- -
-
ServerController accepts incoming connections and assigns - them to ServerThreads in the thread pool.
-
- -
-
ServerThread serves a single client and queues events - for the OutputController to process.
-
- -
-
YamlElement represents a single YAML element.
-
- -
-
YamlList is a YamlElement that contains a list of Strings.
-
- -
-
YamlValue is a YamlElement that contains a String.
-
-
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/allpackages-index.html b/mirrorlog/docs/jdoc/allpackages-index.html deleted file mode 100644 index cb3ed7a..0000000 --- a/mirrorlog/docs/jdoc/allpackages-index.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - -All Packages - - - - - - - - - - - - - - - -
- -
-
-
-

All Packages

-
-
Package Summary
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/constant-values.html b/mirrorlog/docs/jdoc/constant-values.html deleted file mode 100644 index fe1572f..0000000 --- a/mirrorlog/docs/jdoc/constant-values.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - -Constant Field Values - - - - - - - - - - - - - - - -
- -
-
-
-

Constant Field Values

-
-

Contents

- -
-
-
-

org.lavajuno.*

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/element-list b/mirrorlog/docs/jdoc/element-list deleted file mode 100644 index 4f74f15..0000000 --- a/mirrorlog/docs/jdoc/element-list +++ /dev/null @@ -1,5 +0,0 @@ -org.lavajuno.mirrorlog.config -org.lavajuno.mirrorlog.io -org.lavajuno.mirrorlog.main -org.lavajuno.mirrorlog.server -org.lavajuno.mirrorlog.yaml diff --git a/mirrorlog/docs/jdoc/help-doc.html b/mirrorlog/docs/jdoc/help-doc.html deleted file mode 100644 index de21ba9..0000000 --- a/mirrorlog/docs/jdoc/help-doc.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - -API Help - - - - - - - - - - - - - - - -
- -
-
-

JavaDoc Help

- -
-
-

Navigation

-Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces - -
-
-
-

Kinds of Pages

-The following sections describe the different kinds of pages in this collection. -
-

Overview

-

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-
-
-

Package

-

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

-
    -
  • Interfaces
  • -
  • Classes
  • -
  • Enum Classes
  • -
  • Exceptions
  • -
  • Errors
  • -
  • Annotation Interfaces
  • -
-
-
-

Class or Interface

-

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

-
    -
  • Class Inheritance Diagram
  • -
  • Direct Subclasses
  • -
  • All Known Subinterfaces
  • -
  • All Known Implementing Classes
  • -
  • Class or Interface Declaration
  • -
  • Class or Interface Description
  • -
-
-
    -
  • Nested Class Summary
  • -
  • Enum Constant Summary
  • -
  • Field Summary
  • -
  • Property Summary
  • -
  • Constructor Summary
  • -
  • Method Summary
  • -
  • Required Element Summary
  • -
  • Optional Element Summary
  • -
-
-
    -
  • Enum Constant Details
  • -
  • Field Details
  • -
  • Property Details
  • -
  • Constructor Details
  • -
  • Method Details
  • -
  • Element Details
  • -
-

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

-

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

-
-
-

Other Files

-

Packages and modules may contain pages with additional information related to the declarations nearby.

-
-
-

Tree (Class Hierarchy)

-

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

-
    -
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • -
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • -
-
-
-

Constant Field Values

-

The Constant Field Values page lists the static final fields and their values.

-
-
-

All Packages

-

The All Packages page contains an alphabetic index of all packages contained in the documentation.

-
-
-

All Classes and Interfaces

-

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

-
-
-

Index

-

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

-
-
-
-This help file applies to API documentation generated by the standard doclet.
-
-
- - diff --git a/mirrorlog/docs/jdoc/index-all.html b/mirrorlog/docs/jdoc/index-all.html deleted file mode 100644 index 828a01a..0000000 --- a/mirrorlog/docs/jdoc/index-all.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - -Index - - - - - - - - - - - - - - - -
- -
-
-
-

Index

-
-A C G I L M O P R S T Y 
All Classes and Interfaces|All Packages|Constant Field Values -

A

-
-
ApplicationConfig - Class in org.lavajuno.mirrorlog.config
-
-
ApplicationConfig loads and stores the program configuration, and - provides functionality for retrieving configuration values.
-
-
ApplicationConfig(String) - Constructor for class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
Instantiates an ApplicationConfig.
-
-
-

C

-
-
cleanupLogs(String, int) - Method in class org.lavajuno.mirrorlog.io.LogFile
-
-
Cleans up old logs
-
-
close() - Method in class org.lavajuno.mirrorlog.io.LogFile
-
-
Flushes output buffers and closes the file.
-
-
close() - Method in class org.lavajuno.mirrorlog.server.ServerController
-
-
Shuts down the thread pool and stops the server.
-
-
CONFIG_FILE_PATH - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
The path to the program's configuration file
-
-
-

G

-
-
getAllowedAddresses() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The list of allowed IP addresses
-
-
getComponentPad() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The length that component names should be padded to
-
-
getContents() - Method in class org.lavajuno.mirrorlog.yaml.YamlList
-
-
This YamlList's contents.
-
-
getContents() - Method in class org.lavajuno.mirrorlog.yaml.YamlValue
-
-
This YamlValue's contents.
-
-
getElement(String) - Method in class org.lavajuno.mirrorlog.yaml.YamlElement
-
-
Returns the element with the given key in this YamlElement's contained elements.
-
-
getElements() - Method in class org.lavajuno.mirrorlog.yaml.YamlElement
-
-
Returns this YamlElement's contained elements.
-
-
getFileDuration() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The amount of time to be logged in each file
-
-
getFileHistory() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The number of old log files to keep
-
-
getKey() - Method in class org.lavajuno.mirrorlog.yaml.YamlElement
-
-
Returns this YamlElement's key
-
-
getLogToFile() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
Whether the program should log to files as well as the console
-
-
getPort() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The port the server listens on
-
-
getThreads() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The number of simultaneous connections the server will handle
-
-
getTimeout() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
The socket timeout for inactive clients
-
-
-

I

-
-
INPUT_BUFFER_SIZE - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
The size of the input buffer for log events (bytes)
-
-
interrupt() - Method in class org.lavajuno.mirrorlog.server.ServerController
-
 
-
interrupt() - Method in class org.lavajuno.mirrorlog.server.ServerThread
-
 
-
IO_SHUTDOWN_TIMEOUT - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
How long ServerController should wait for OutputController to shut down (ms)
-
-
isExpired() - Method in class org.lavajuno.mirrorlog.io.LogFile
-
-
Checks if this LogFile is expired.
-
-
isRestricted() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
Whether access is restricted to certain IP addresses
-
-
-

L

-
-
LOG_DATE_FORMAT - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
The date and time format of log events.
-
-
LogEvent - Class in org.lavajuno.mirrorlog.io
-
-
LogEvent stores a single log event and provides functionality to - convert it to a string to be printed to the console or a file.
-
-
LogEvent(String, int, String, ApplicationConfig) - Constructor for class org.lavajuno.mirrorlog.io.LogEvent
-
-
Instantiates a LogEvent.
-
-
LogFile - Class in org.lavajuno.mirrorlog.io
-
-
LogFile handles creating, writing to, and deleting log files for OutputController.
-
-
LogFile(ApplicationConfig) - Constructor for class org.lavajuno.mirrorlog.io.LogFile
-
-
Instantiates a LogFile.
-
-
LogMap - Class in org.lavajuno.mirrorlog.main
-
-
The purpose of LogMap is to eliminate the presence of magic numbers in the program.
-
-
LogMap() - Constructor for class org.lavajuno.mirrorlog.main.LogMap
-
 
-
-

M

-
-
main(String[]) - Static method in class org.lavajuno.mirrorlog.main.MirrorLogApplication
-
-
Starts MirrorLog.
-
-
MirrorLogApplication - Class in org.lavajuno.mirrorlog.main
-
-
MirrorLogApplication handles startup and shutdown of the server.
-
-
MirrorLogApplication() - Constructor for class org.lavajuno.mirrorlog.main.MirrorLogApplication
-
 
-
-

O

-
-
org.lavajuno.mirrorlog.config - package org.lavajuno.mirrorlog.config
-
 
-
org.lavajuno.mirrorlog.io - package org.lavajuno.mirrorlog.io
-
 
-
org.lavajuno.mirrorlog.main - package org.lavajuno.mirrorlog.main
-
 
-
org.lavajuno.mirrorlog.server - package org.lavajuno.mirrorlog.server
-
 
-
org.lavajuno.mirrorlog.yaml - package org.lavajuno.mirrorlog.yaml
-
 
-
OutputController - Class in org.lavajuno.mirrorlog.io
-
-
OutputController queues log entries from multiple ServerThreads - and handles printing them to the console as well as writing them to files.
-
-
OutputController(ApplicationConfig) - Constructor for class org.lavajuno.mirrorlog.io.OutputController
-
-
Instantiates an OutputController.
-
-
-

P

-
-
print(LogEvent) - Method in class org.lavajuno.mirrorlog.io.LogFile
-
-
Prints a log event to the file.
-
-
-

R

-
-
run() - Method in class org.lavajuno.mirrorlog.io.OutputController
-
-
OutputController's thread.
-
-
run() - Method in class org.lavajuno.mirrorlog.server.ServerController
-
 
-
run() - Method in class org.lavajuno.mirrorlog.server.ServerThread
-
 
-
-

S

-
-
SERVER_SHUTDOWN_TIMEOUT - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
How long MirrorLogApplication should wait for ServerController to shut down (ms)
-
-
ServerController - Class in org.lavajuno.mirrorlog.server
-
-
ServerController accepts incoming connections and assigns - them to ServerThreads in the thread pool.
-
-
ServerController() - Constructor for class org.lavajuno.mirrorlog.server.ServerController
-
-
Instantiates a ServerController.
-
-
ServerThread - Class in org.lavajuno.mirrorlog.server
-
-
ServerThread serves a single client and queues events - for the OutputController to process.
-
-
ServerThread(Socket, OutputController, ApplicationConfig) - Constructor for class org.lavajuno.mirrorlog.server.ServerThread
-
-
Instantiates a ServerThread.
-
-
SEVERITY_ERROR - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
 
-
SEVERITY_ERROR_PRETTY - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
Color and header of messages with severity 2
-
-
SEVERITY_FATAL - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
 
-
SEVERITY_FATAL_PRETTY - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
Color and header of messages with severity 3
-
-
SEVERITY_INFO - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
 
-
SEVERITY_INFO_PRETTY - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
Color and header of messages with severity 0
-
-
SEVERITY_WARN - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
 
-
SEVERITY_WARN_PRETTY - Static variable in class org.lavajuno.mirrorlog.main.LogMap
-
-
Color and header of messages with severity 1
-
-
submitEvent(String, int, String) - Method in class org.lavajuno.mirrorlog.io.OutputController
-
-
Submits an event to be logged
-
-
-

T

-
-
toPrettyString() - Method in class org.lavajuno.mirrorlog.io.LogEvent
-
-
Like toString, but with colored status indicators.
-
-
toString() - Method in class org.lavajuno.mirrorlog.config.ApplicationConfig
-
 
-
toString() - Method in class org.lavajuno.mirrorlog.io.LogEvent
-
 
-
toString() - Method in class org.lavajuno.mirrorlog.yaml.YamlElement
-
 
-
toString() - Method in class org.lavajuno.mirrorlog.yaml.YamlList
-
 
-
toString() - Method in class org.lavajuno.mirrorlog.yaml.YamlValue
-
 
-
toString(int) - Method in class org.lavajuno.mirrorlog.yaml.YamlList
-
 
-
-

Y

-
-
YamlElement - Class in org.lavajuno.mirrorlog.yaml
-
-
YamlElement represents a single YAML element.
-
-
YamlElement(List<String>) - Constructor for class org.lavajuno.mirrorlog.yaml.YamlElement
-
-
Constructs a YamlElement by recursively parsing lines of YAML into a structure of YamlElements.
-
-
YamlList - Class in org.lavajuno.mirrorlog.yaml
-
-
YamlList is a YamlElement that contains a list of Strings.
-
-
YamlValue - Class in org.lavajuno.mirrorlog.yaml
-
-
YamlValue is a YamlElement that contains a String.
-
-
-A C G I L M O P R S T Y 
All Classes and Interfaces|All Packages|Constant Field Values
-
-
- - diff --git a/mirrorlog/docs/jdoc/index.html b/mirrorlog/docs/jdoc/index.html deleted file mode 100644 index f1fffb3..0000000 --- a/mirrorlog/docs/jdoc/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -Overview - - - - - - - - - - - - - - - -
- - -
- - diff --git a/mirrorlog/docs/jdoc/jquery-ui.overrides.css b/mirrorlog/docs/jdoc/jquery-ui.overrides.css deleted file mode 100644 index facf852..0000000 --- a/mirrorlog/docs/jdoc/jquery-ui.overrides.css +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - /* Overrides the color of selection used in jQuery UI */ - background: #F8981D; - border: 1px solid #F8981D; -} diff --git a/mirrorlog/docs/jdoc/legal/ASSEMBLY_EXCEPTION b/mirrorlog/docs/jdoc/legal/ASSEMBLY_EXCEPTION deleted file mode 100644 index 065b8d9..0000000 --- a/mirrorlog/docs/jdoc/legal/ASSEMBLY_EXCEPTION +++ /dev/null @@ -1,27 +0,0 @@ - -OPENJDK ASSEMBLY EXCEPTION - -The OpenJDK source code made available by Oracle America, Inc. (Oracle) at -openjdk.java.net ("OpenJDK Code") is distributed under the terms of the GNU -General Public License version 2 -only ("GPL2"), with the following clarification and special exception. - - Linking this OpenJDK Code statically or dynamically with other code - is making a combined work based on this library. Thus, the terms - and conditions of GPL2 cover the whole combination. - - As a special exception, Oracle gives you permission to link this - OpenJDK Code with certain code licensed by Oracle as indicated at - http://openjdk.java.net/legal/exception-modules-2007-05-08.html - ("Designated Exception Modules") to produce an executable, - regardless of the license terms of the Designated Exception Modules, - and to copy and distribute the resulting executable under GPL2, - provided that the Designated Exception Modules continue to be - governed by the licenses under which they were offered by Oracle. - -As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code -to build an executable that includes those portions of necessary code that -Oracle could not provide under GPL2 (or that Oracle has provided under GPL2 -with the Classpath exception). If you modify or add to the OpenJDK code, -that new GPL2 code may still be combined with Designated Exception Modules -if the new code is made subject to this exception by its copyright holder. diff --git a/mirrorlog/docs/jdoc/legal/jquery.md b/mirrorlog/docs/jdoc/legal/jquery.md deleted file mode 100644 index d468b31..0000000 --- a/mirrorlog/docs/jdoc/legal/jquery.md +++ /dev/null @@ -1,72 +0,0 @@ -## jQuery v3.6.1 - -### jQuery License -``` -jQuery v 3.6.1 -Copyright OpenJS Foundation and other contributors, https://openjsf.org/ - -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. - -****************************************** - -The jQuery JavaScript Library v3.6.1 also includes Sizzle.js - -Sizzle.js includes the following license: - -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/sizzle - -The following license applies to all parts of this software except as -documented below: - -==== - -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. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -********************* - -``` diff --git a/mirrorlog/docs/jdoc/legal/jqueryUI.md b/mirrorlog/docs/jdoc/legal/jqueryUI.md deleted file mode 100644 index 8031bdb..0000000 --- a/mirrorlog/docs/jdoc/legal/jqueryUI.md +++ /dev/null @@ -1,49 +0,0 @@ -## jQuery UI v1.12.1 - -### jQuery UI License -``` -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery-ui - -The following license applies to all parts of this software except as -documented below: - -==== - -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. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code contained within the demos directory. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -``` diff --git a/mirrorlog/docs/jdoc/member-search-index.js b/mirrorlog/docs/jdoc/member-search-index.js deleted file mode 100644 index 2632f33..0000000 --- a/mirrorlog/docs/jdoc/member-search-index.js +++ /dev/null @@ -1 +0,0 @@ -memberSearchIndex = [{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"ApplicationConfig(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"org.lavajuno.mirrorlog.io","c":"LogFile","l":"cleanupLogs(String, int)","u":"cleanupLogs(java.lang.String,int)"},{"p":"org.lavajuno.mirrorlog.io","c":"LogFile","l":"close()"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerController","l":"close()"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"CONFIG_FILE_PATH"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getAllowedAddresses()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getComponentPad()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlList","l":"getContents()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlValue","l":"getContents()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlElement","l":"getElement(String)","u":"getElement(java.lang.String)"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlElement","l":"getElements()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getFileDuration()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getFileHistory()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlElement","l":"getKey()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getLogToFile()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getPort()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getThreads()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"getTimeout()"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"INPUT_BUFFER_SIZE"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerController","l":"interrupt()"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerThread","l":"interrupt()"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"IO_SHUTDOWN_TIMEOUT"},{"p":"org.lavajuno.mirrorlog.io","c":"LogFile","l":"isExpired()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"isRestricted()"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"LOG_DATE_FORMAT"},{"p":"org.lavajuno.mirrorlog.io","c":"LogEvent","l":"LogEvent(String, int, String, ApplicationConfig)","u":"%3Cinit%3E(java.lang.String,int,java.lang.String,org.lavajuno.mirrorlog.config.ApplicationConfig)"},{"p":"org.lavajuno.mirrorlog.io","c":"LogFile","l":"LogFile(ApplicationConfig)","u":"%3Cinit%3E(org.lavajuno.mirrorlog.config.ApplicationConfig)"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"LogMap()","u":"%3Cinit%3E()"},{"p":"org.lavajuno.mirrorlog.main","c":"MirrorLogApplication","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"org.lavajuno.mirrorlog.main","c":"MirrorLogApplication","l":"MirrorLogApplication()","u":"%3Cinit%3E()"},{"p":"org.lavajuno.mirrorlog.io","c":"OutputController","l":"OutputController(ApplicationConfig)","u":"%3Cinit%3E(org.lavajuno.mirrorlog.config.ApplicationConfig)"},{"p":"org.lavajuno.mirrorlog.io","c":"LogFile","l":"print(LogEvent)","u":"print(org.lavajuno.mirrorlog.io.LogEvent)"},{"p":"org.lavajuno.mirrorlog.io","c":"OutputController","l":"run()"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerController","l":"run()"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerThread","l":"run()"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SERVER_SHUTDOWN_TIMEOUT"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerController","l":"ServerController()","u":"%3Cinit%3E()"},{"p":"org.lavajuno.mirrorlog.server","c":"ServerThread","l":"ServerThread(Socket, OutputController, ApplicationConfig)","u":"%3Cinit%3E(java.net.Socket,org.lavajuno.mirrorlog.io.OutputController,org.lavajuno.mirrorlog.config.ApplicationConfig)"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_ERROR"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_ERROR_PRETTY"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_FATAL"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_FATAL_PRETTY"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_INFO"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_INFO_PRETTY"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_WARN"},{"p":"org.lavajuno.mirrorlog.main","c":"LogMap","l":"SEVERITY_WARN_PRETTY"},{"p":"org.lavajuno.mirrorlog.io","c":"OutputController","l":"submitEvent(String, int, String)","u":"submitEvent(java.lang.String,int,java.lang.String)"},{"p":"org.lavajuno.mirrorlog.io","c":"LogEvent","l":"toPrettyString()"},{"p":"org.lavajuno.mirrorlog.config","c":"ApplicationConfig","l":"toString()"},{"p":"org.lavajuno.mirrorlog.io","c":"LogEvent","l":"toString()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlElement","l":"toString()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlList","l":"toString()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlValue","l":"toString()"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlList","l":"toString(int)"},{"p":"org.lavajuno.mirrorlog.yaml","c":"YamlElement","l":"YamlElement(List)","u":"%3Cinit%3E(java.util.List)"}];updateSearchResults(); \ No newline at end of file diff --git a/mirrorlog/docs/jdoc/module-search-index.js b/mirrorlog/docs/jdoc/module-search-index.js deleted file mode 100644 index 0d59754..0000000 --- a/mirrorlog/docs/jdoc/module-search-index.js +++ /dev/null @@ -1 +0,0 @@ -moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/ApplicationConfig.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/ApplicationConfig.html deleted file mode 100644 index 1a16e06..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/ApplicationConfig.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - -ApplicationConfig - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class ApplicationConfig

-
-
java.lang.Object -
org.lavajuno.mirrorlog.config.ApplicationConfig
-
-
-
-
public class ApplicationConfig -extends Object
-
ApplicationConfig loads and stores the program configuration, and - provides functionality for retrieving configuration values.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      ApplicationConfig

      -
      public ApplicationConfig(String config_file_path) - throws IOException
      -
      Instantiates an ApplicationConfig. - Loads program configuration from the specified configuration file, - and stores the resulting configuration in the instance.
      -
      -
      Parameters:
      -
      config_file_path - Path to the configuration file to load
      -
      Throws:
      -
      IOException - If loading the configuration fails.
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      getThreads

      -
      public int getThreads()
      -
      The number of simultaneous connections the server will handle
      -
      -
      Returns:
      -
      The value of "threads"
      -
      -
      -
    • -
    • -
      -

      getPort

      -
      public int getPort()
      -
      The port the server listens on
      -
      -
      Returns:
      -
      The value of "port"
      -
      -
      -
    • -
    • -
      -

      getTimeout

      -
      public int getTimeout()
      -
      The socket timeout for inactive clients
      -
      -
      Returns:
      -
      The value of "timeout"
      -
      -
      -
    • -
    • -
      -

      isRestricted

      -
      public boolean isRestricted()
      -
      Whether access is restricted to certain IP addresses
      -
      -
      Returns:
      -
      The value of "restricted"
      -
      -
      -
    • -
    • -
      -

      getAllowedAddresses

      -
      public Vector<InetAddress> getAllowedAddresses()
      -
      The list of allowed IP addresses
      -
      -
      Returns:
      -
      The value of "allowed_addresses"
      -
      -
      -
    • -
    • -
      -

      getComponentPad

      -
      public int getComponentPad()
      -
      The length that component names should be padded to
      -
      -
      Returns:
      -
      The value of "component_pad"
      -
      -
      -
    • -
    • -
      -

      getLogToFile

      -
      public boolean getLogToFile()
      -
      Whether the program should log to files as well as the console
      -
      -
      Returns:
      -
      The value of "log_to_file"
      -
      -
      -
    • -
    • -
      -

      getFileDuration

      -
      public int getFileDuration()
      -
      The amount of time to be logged in each file
      -
      -
      Returns:
      -
      The value of "file_duration"
      -
      -
      -
    • -
    • -
      -

      getFileHistory

      -
      public int getFileHistory()
      -
      The number of old log files to keep
      -
      -
      Returns:
      -
      The value of "file_history"
      -
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class Object
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-summary.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-summary.html deleted file mode 100644 index ceb7cea..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-summary.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - -org.lavajuno.mirrorlog.config - - - - - - - - - - - - - - - -
- -
-
-
-

Package org.lavajuno.mirrorlog.config

-
-
-
package org.lavajuno.mirrorlog.config
-
-
    -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
    -
    ApplicationConfig loads and stores the program configuration, and - provides functionality for retrieving configuration values.
    -
    -
    -
    -
  • -
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-tree.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-tree.html deleted file mode 100644 index 3496cb9..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/config/package-tree.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -org.lavajuno.mirrorlog.config Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package org.lavajuno.mirrorlog.config

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogEvent.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogEvent.html deleted file mode 100644 index 4e6cf17..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogEvent.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - -LogEvent - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class LogEvent

-
-
java.lang.Object -
org.lavajuno.mirrorlog.io.LogEvent
-
-
-
-
public class LogEvent -extends Object
-
LogEvent stores a single log event and provides functionality to - convert it to a string to be printed to the console or a file.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      LogEvent

      -
      public LogEvent(String component_name, - int severity, - String message, - ApplicationConfig application_config)
      -
      Instantiates a LogEvent.
      -
      -
      Parameters:
      -
      component_name - The component name to be logged
      -
      severity - The severity of the event
      -
      message - The message to be logged
      -
      application_config - ApplicationConfig to use
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      toPrettyString

      -
      public String toPrettyString()
      -
      Like toString, but with colored status indicators.
      -
      -
      Returns:
      -
      This LogEvent as a string.
      -
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class Object
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogFile.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogFile.html deleted file mode 100644 index 66f4b96..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/LogFile.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - -LogFile - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class LogFile

-
-
java.lang.Object -
org.lavajuno.mirrorlog.io.LogFile
-
-
-
-
public class LogFile -extends Object
-
LogFile handles creating, writing to, and deleting log files for OutputController.
-
-
-
    - -
  • -
    -

    Constructor Summary

    -
    Constructors
    -
    -
    Constructor
    -
    Description
    -
    LogFile(ApplicationConfig application_config)
    -
    -
    Instantiates a LogFile.
    -
    -
    -
    -
  • - -
  • -
    -

    Method Summary

    -
    -
    -
    -
    -
    Modifier and Type
    -
    Method
    -
    Description
    -
    void
    -
    cleanupLogs(String path, - int max_logs)
    -
    -
    Cleans up old logs
    -
    -
    void
    - -
    -
    Flushes output buffers and closes the file.
    -
    -
    boolean
    - -
    -
    Checks if this LogFile is expired.
    -
    -
    void
    -
    print(LogEvent event)
    -
    -
    Prints a log event to the file.
    -
    -
    -
    -
    -
    -

    Methods inherited from class java.lang.Object

    -equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -
    -
  • -
-
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      LogFile

      -
      public LogFile(ApplicationConfig application_config) - throws IOException
      -
      Instantiates a LogFile. - Creates new files and cleans up old ones if needed.
      -
      -
      Parameters:
      -
      application_config - ApplicationConfiguration to use
      -
      Throws:
      -
      IOException - Passes along IOExceptions from file accessors
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      print

      -
      public void print(LogEvent event)
      -
      Prints a log event to the file.
      -
      -
      Parameters:
      -
      event - Log event to print
      -
      -
      -
    • -
    • -
      -

      close

      -
      public void close()
      -
      Flushes output buffers and closes the file.
      -
      -
    • -
    • -
      -

      isExpired

      -
      public boolean isExpired()
      -
      Checks if this LogFile is expired.
      -
      -
      Returns:
      -
      True if this LogFile is expired.
      -
      -
      -
    • -
    • -
      -

      cleanupLogs

      -
      public void cleanupLogs(String path, - int max_logs)
      -
      Cleans up old logs
      -
      -
      Parameters:
      -
      path - Path to log directory
      -
      max_logs - Amount of log files to keep
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/OutputController.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/OutputController.html deleted file mode 100644 index e2d056c..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/OutputController.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - -OutputController - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class OutputController

-
-
java.lang.Object -
java.lang.Thread -
org.lavajuno.mirrorlog.io.OutputController
-
-
-
-
-
All Implemented Interfaces:
-
Runnable
-
-
-
public class OutputController -extends Thread
-
OutputController queues log entries from multiple ServerThreads - and handles printing them to the console as well as writing them to files.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      OutputController

      -
      public OutputController(ApplicationConfig application_config) - throws IOException
      -
      Instantiates an OutputController.
      -
      -
      Parameters:
      -
      application_config - ApplicationConfig to use
      -
      Throws:
      -
      IOException
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      submitEvent

      -
      public void submitEvent(String component_name, - int severity, - String message)
      -
      Submits an event to be logged
      -
      -
      Parameters:
      -
      component_name - Component name of the log event
      -
      severity - Severity of the log event
      -
      message - Message to be logged
      -
      -
      -
    • -
    • -
      -

      run

      -
      public void run()
      -
      OutputController's thread.
      -
      -
      Specified by:
      -
      run in interface Runnable
      -
      Overrides:
      -
      run in class Thread
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-summary.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-summary.html deleted file mode 100644 index 7fdd1cb..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-summary.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - -org.lavajuno.mirrorlog.io - - - - - - - - - - - - - - - -
- -
-
-
-

Package org.lavajuno.mirrorlog.io

-
-
-
package org.lavajuno.mirrorlog.io
-
-
    -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
    -
    LogEvent stores a single log event and provides functionality to - convert it to a string to be printed to the console or a file.
    -
    - -
    -
    LogFile handles creating, writing to, and deleting log files for OutputController.
    -
    - -
    -
    OutputController queues log entries from multiple ServerThreads - and handles printing them to the console as well as writing them to files.
    -
    -
    -
    -
  • -
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-tree.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-tree.html deleted file mode 100644 index 2f6acad..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/io/package-tree.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -org.lavajuno.mirrorlog.io Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package org.lavajuno.mirrorlog.io

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/LogMap.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/LogMap.html deleted file mode 100644 index 24a1a33..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/LogMap.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - -LogMap - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class LogMap

-
-
java.lang.Object -
org.lavajuno.mirrorlog.main.LogMap
-
-
-
-
public class LogMap -extends Object
-
The purpose of LogMap is to eliminate the presence of magic numbers in the program. - Some of these parameters may eventually be moved to the configuration file. - Others, like the path to the config file and the size of the input buffer, should stay here.
-
-
- -
-
-
    - -
  • -
    -

    Field Details

    -
      -
    • -
      -

      CONFIG_FILE_PATH

      -
      public static final String CONFIG_FILE_PATH
      -
      The path to the program's configuration file
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      INPUT_BUFFER_SIZE

      -
      public static final int INPUT_BUFFER_SIZE
      -
      The size of the input buffer for log events (bytes)
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SERVER_SHUTDOWN_TIMEOUT

      -
      public static final int SERVER_SHUTDOWN_TIMEOUT
      -
      How long MirrorLogApplication should wait for ServerController to shut down (ms)
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      IO_SHUTDOWN_TIMEOUT

      -
      public static final int IO_SHUTDOWN_TIMEOUT
      -
      How long ServerController should wait for OutputController to shut down (ms)
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      LOG_DATE_FORMAT

      -
      public static final SimpleDateFormat LOG_DATE_FORMAT
      -
      The date and time format of log events.
      -
      -
    • -
    • -
      -

      SEVERITY_INFO_PRETTY

      -
      public static final String SEVERITY_INFO_PRETTY
      -
      Color and header of messages with severity 0
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_INFO

      -
      public static final String SEVERITY_INFO
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_WARN_PRETTY

      -
      public static final String SEVERITY_WARN_PRETTY
      -
      Color and header of messages with severity 1
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_WARN

      -
      public static final String SEVERITY_WARN
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_ERROR_PRETTY

      -
      public static final String SEVERITY_ERROR_PRETTY
      -
      Color and header of messages with severity 2
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_ERROR

      -
      public static final String SEVERITY_ERROR
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_FATAL_PRETTY

      -
      public static final String SEVERITY_FATAL_PRETTY
      -
      Color and header of messages with severity 3
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    • -
      -

      SEVERITY_FATAL

      -
      public static final String SEVERITY_FATAL
      -
      -
      See Also:
      -
      - -
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      LogMap

      -
      public LogMap()
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/MirrorLogApplication.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/MirrorLogApplication.html deleted file mode 100644 index 34d39b0..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/MirrorLogApplication.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - -MirrorLogApplication - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class MirrorLogApplication

-
-
java.lang.Object -
org.lavajuno.mirrorlog.main.MirrorLogApplication
-
-
-
-
public class MirrorLogApplication -extends Object
-
MirrorLogApplication handles startup and shutdown of the server.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      MirrorLogApplication

      -
      public MirrorLogApplication()
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      main

      -
      public static void main(String[] args)
      -
      Starts MirrorLog.
      -
      -
      Parameters:
      -
      args - Unused
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-summary.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-summary.html deleted file mode 100644 index c6518ca..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-summary.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - -org.lavajuno.mirrorlog.main - - - - - - - - - - - - - - - -
- -
-
-
-

Package org.lavajuno.mirrorlog.main

-
-
-
package org.lavajuno.mirrorlog.main
-
-
    -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
    -
    The purpose of LogMap is to eliminate the presence of magic numbers in the program.
    -
    - -
    -
    MirrorLogApplication handles startup and shutdown of the server.
    -
    -
    -
    -
  • -
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-tree.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-tree.html deleted file mode 100644 index 997afc9..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/main/package-tree.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - -org.lavajuno.mirrorlog.main Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package org.lavajuno.mirrorlog.main

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerController.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerController.html deleted file mode 100644 index 181f6dc..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerController.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - -ServerController - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class ServerController

-
-
java.lang.Object -
java.lang.Thread -
org.lavajuno.mirrorlog.server.ServerController
-
-
-
-
-
All Implemented Interfaces:
-
Runnable
-
-
-
public class ServerController -extends Thread
-
ServerController accepts incoming connections and assigns - them to ServerThreads in the thread pool.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      ServerController

      -
      public ServerController() - throws IOException
      -
      Instantiates a ServerController.
      -
      -
      Throws:
      -
      IOException - if the socket cannot be created
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      run

      -
      public void run()
      -
      -
      Specified by:
      -
      run in interface Runnable
      -
      Overrides:
      -
      run in class Thread
      -
      -
      -
    • -
    • -
      -

      interrupt

      -
      public void interrupt()
      -
      -
      Overrides:
      -
      interrupt in class Thread
      -
      -
      -
    • -
    • -
      -

      close

      -
      public void close()
      -
      Shuts down the thread pool and stops the server.
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerThread.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerThread.html deleted file mode 100644 index 8214820..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/ServerThread.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - -ServerThread - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class ServerThread

-
-
java.lang.Object -
java.lang.Thread -
org.lavajuno.mirrorlog.server.ServerThread
-
-
-
-
-
All Implemented Interfaces:
-
Runnable
-
-
-
public class ServerThread -extends Thread
-
ServerThread serves a single client and queues events - for the OutputController to process.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      ServerThread

      -
      public ServerThread(Socket socket, - OutputController outputController, - ApplicationConfig application_config)
      -
      Instantiates a ServerThread.
      -
      -
      Parameters:
      -
      socket - Socket to communicate with client over
      -
      outputController - OutputController to queue events in
      -
      application_config - ApplicationConfig to use
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      run

      -
      public void run()
      -
      -
      Specified by:
      -
      run in interface Runnable
      -
      Overrides:
      -
      run in class Thread
      -
      -
      -
    • -
    • -
      -

      interrupt

      -
      public void interrupt()
      -
      -
      Overrides:
      -
      interrupt in class Thread
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-summary.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-summary.html deleted file mode 100644 index 9b2a801..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-summary.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - -org.lavajuno.mirrorlog.server - - - - - - - - - - - - - - - -
- -
-
-
-

Package org.lavajuno.mirrorlog.server

-
-
-
package org.lavajuno.mirrorlog.server
-
-
    -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
    -
    ServerController accepts incoming connections and assigns - them to ServerThreads in the thread pool.
    -
    - -
    -
    ServerThread serves a single client and queues events - for the OutputController to process.
    -
    -
    -
    -
  • -
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-tree.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-tree.html deleted file mode 100644 index d0aec09..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/server/package-tree.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - -org.lavajuno.mirrorlog.server Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package org.lavajuno.mirrorlog.server

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlElement.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlElement.html deleted file mode 100644 index 6cfbbf3..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlElement.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - -YamlElement - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class YamlElement

-
-
java.lang.Object -
org.lavajuno.mirrorlog.yaml.YamlElementOld
-
-
-
-
Direct Known Subclasses:
-
YamlList, YamlValue
-
-
-
public class YamlElement -extends Object
-
YamlElement represents a single YAML element. - This can be either an element containing 0 or more YamlElements, - an element containing a string, or an element containing a list of strings. - It is constructed with a list of lines, and parses them by - recursively constructing new YamlElements. - YamlElement has two inheritors: - - YamlList - A YamlElement that contains a list of values. - - YamlValue - A YamlElement that contains a single value. - YamlList and YamlValue are the base cases for the recursive constructor. - They cannot have any children, and instead contain a String (or a Vector of Strings). - A YamlElement's children are stored in a red-black tree, so it is quick - to access individual elements. You can also access all elements as a Collection.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      YamlElement

      -
      public YamlElement(List<String> lines) - throws InvalidPropertiesFormatException
      -
      Constructs a YamlElement by recursively parsing lines of YAML into a structure of YamlElements. - The outermost element will always be called "root", and will contain all elements defined in the input YAML.
      -
      -
      Parameters:
      -
      lines - Lines of YAML to parse
      -
      Throws:
      -
      InvalidPropertiesFormatException - If YAML is invalid or the parser cannot continue
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      getKey

      -
      public String getKey()
      -
      Returns this YamlElement's key
      -
      -
      Returns:
      -
      this YamlElement's key
      -
      -
      -
    • -
    • -
      -

      getElement

      -
      public YamlElement getElement(String key)
      -
      Returns the element with the given key in this YamlElement's contained elements.
      -
      -
      Parameters:
      -
      key - The key to match
      -
      Returns:
      -
      The element with the given key (or null if none is found)
      -
      -
      -
    • -
    • -
      -

      getElements

      -
      public Collection<YamlElement> getElements()
      -
      Returns this YamlElement's contained elements.
      -
      -
      Returns:
      -
      This YamlElement's contained elements.
      -
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class Object
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlList.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlList.html deleted file mode 100644 index b062fa3..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlList.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - -YamlList - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class YamlList

-
-
java.lang.Object -
org.lavajuno.mirrorlog.yaml.YamlElementOld -
org.lavajuno.mirrorlog.yaml.YamlList
-
-
-
-
-
public class YamlList -extends YamlElement
-
YamlList is a YamlElement that contains a list of Strings. - A YamlList never has children (YamlList.getElements() will always be null).
-
-
- -
-
-
    - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      getContents

      -
      public List<String> getContents()
      -
      This YamlList's contents.
      -
      -
      Returns:
      -
      This YamlList's contents.
      -
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString(int indent)
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class YamlElement
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlValue.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlValue.html deleted file mode 100644 index 893cf4c..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/YamlValue.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - -YamlValue - - - - - - - - - - - - - - - -
- -
-
- -
- -

Class YamlValue

-
-
java.lang.Object -
org.lavajuno.mirrorlog.yaml.YamlElementOld -
org.lavajuno.mirrorlog.yaml.YamlValueOld
-
-
-
-
-
public class YamlValue -extends YamlElement
-
YamlValue is a YamlElement that contains a String. - A YamlValue never has children (YamlValue.getElements() will always be null).
-
-
- -
-
-
    - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      getContents

      -
      public String getContents()
      -
      This YamlValue's contents.
      -
      -
      Returns:
      -
      This YamlValue's contents.
      -
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class YamlElement
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-summary.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-summary.html deleted file mode 100644 index 497d747..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-summary.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -org.lavajuno.mirrorlog.yaml - - - - - - - - - - - - - - - -
- -
-
-
-

Package org.lavajuno.mirrorlog.yaml

-
-
-
package org.lavajuno.mirrorlog.yaml
-
-
    -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
    -
    YamlElement represents a single YAML element.
    -
    - -
    -
    YamlList is a YamlElement that contains a list of Strings.
    -
    - -
    -
    YamlValue is a YamlElement that contains a String.
    -
    -
    -
    -
  • -
-
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-tree.html b/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-tree.html deleted file mode 100644 index a08ce85..0000000 --- a/mirrorlog/docs/jdoc/org/lavajuno/mirrorlog/yaml/package-tree.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - -org.lavajuno.mirrorlog.yaml Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package org.lavajuno.mirrorlog.yaml

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/overview-summary.html b/mirrorlog/docs/jdoc/overview-summary.html deleted file mode 100644 index d60cc5e..0000000 --- a/mirrorlog/docs/jdoc/overview-summary.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - -Generated Documentation (Untitled) - - - - - - - - - - - -
- -

index.html

-
- - diff --git a/mirrorlog/docs/jdoc/overview-tree.html b/mirrorlog/docs/jdoc/overview-tree.html deleted file mode 100644 index d863de5..0000000 --- a/mirrorlog/docs/jdoc/overview-tree.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - -Class Hierarchy - - - - - - - - - - - - - - - -
- -
-
- -
-

Class Hierarchy

- -
-
-
-
- - diff --git a/mirrorlog/docs/jdoc/package-search-index.js b/mirrorlog/docs/jdoc/package-search-index.js deleted file mode 100644 index 84390c0..0000000 --- a/mirrorlog/docs/jdoc/package-search-index.js +++ /dev/null @@ -1 +0,0 @@ -packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"org.lavajuno.mirrorlog.config"},{"l":"org.lavajuno.mirrorlog.io"},{"l":"org.lavajuno.mirrorlog.main"},{"l":"org.lavajuno.mirrorlog.server"},{"l":"org.lavajuno.mirrorlog.yaml"}];updateSearchResults(); \ No newline at end of file diff --git a/mirrorlog/docs/jdoc/resources/glass.png b/mirrorlog/docs/jdoc/resources/glass.png deleted file mode 100644 index a7f591f..0000000 Binary files a/mirrorlog/docs/jdoc/resources/glass.png and /dev/null differ diff --git a/mirrorlog/docs/jdoc/resources/x.png b/mirrorlog/docs/jdoc/resources/x.png deleted file mode 100644 index 30548a7..0000000 Binary files a/mirrorlog/docs/jdoc/resources/x.png and /dev/null differ diff --git a/mirrorlog/docs/jdoc/script-dir/jquery-3.6.1.min.js b/mirrorlog/docs/jdoc/script-dir/jquery-3.6.1.min.js deleted file mode 100644 index 2c69bc9..0000000 --- a/mirrorlog/docs/jdoc/script-dir/jquery-3.6.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("