
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xml:lang="en" lang="en">
    <!-- this is a JXR report set (jdk8) -->
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <title>Archiva Base :: Consumers :: Core Consumers 3.0.0-SNAPSHOT Reference</title>
        <script type="text/javascript">
            tmpTargetPage = "" + window.location.search;
            if (tmpTargetPage != "" && tmpTargetPage != "undefined")
                tmpTargetPage = tmpTargetPage.substring(1);
            if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
                tmpTargetPage = "undefined";
            targetPage = tmpTargetPage;
            function validURL(url) {
                try {
                    url = decodeURIComponent(url);
                }
                catch (error) {
                    return false;
                }
                var pos = url.indexOf(".html");
                if (pos == -1 || pos != url.length - 5)
                    return false;
                var allowNumber = false;
                var allowSep = false;
                var seenDot = false;
                for (var i = 0; i < url.length - 5; i++) {
                    var ch = url.charAt(i);
                    if ('a' <= ch && ch <= 'z' ||
                            'A' <= ch && ch <= 'Z' ||
                            ch == '$' ||
                            ch == '_' ||
                            ch.charCodeAt(0) > 127) {
                        allowNumber = true;
                        allowSep = true;
                    } else if ('0' <= ch && ch <= '9'
                            || ch == '-') {
                        if (!allowNumber)
                            return false;
                    } else if (ch == '/' || ch == '.') {
                        if (!allowSep)
                            return false;
                        allowNumber = false;
                        allowSep = false;
                        if (ch == '.')
                            seenDot = true;
                        if (ch == '/' && seenDot)
                            return false;
                    } else {
                        return false;
                    }
                }
                return true;
            }
            function loadFrames() {
                if (targetPage != "" && targetPage != "undefined")
                    top.classFrame.location = top.targetPage;
            }
        </script>
    </head>
    <frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
        <frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
            <frame src="overview-frame.html" name="packageListFrame" title="All Packages"/>
            <frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)"/>
        </frameset>
        <frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes"/>
        <noframes>
            <h1>Frame Alert</h1>
            <p>
                You don't have frames. Go <a href="overview-summary.html">here</a>
            </p>
        </noframes>
    </frameset>
</html>