org.apache.archiva.web.startup.Banner.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.archiva.web.startup.Banner.java

Source

package org.apache.archiva.web.startup;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import org.apache.commons.lang.StringUtils;
import org.slf4j.LoggerFactory;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Banner 
 *
 *
 */
public class Banner {
    private static final String eol = System.getProperty("line.separator");

    public static String encode(String raw) {
        // Canonicalize line ends to make them easier to process
        raw = raw.replace("\r\n", "\n").replace("\r", "\n");

        StringBuilder encoded = new StringBuilder();
        int rawlen = raw.length();

        for (int i = 0; i < rawlen; i++) {
            char c = raw.charAt(i);
            if (c == '\\') {
                encoded.append("$.");
            } else if (c == '$') {
                encoded.append("$$");
            } else if (c == '\n') {
                encoded.append("$n");
            } else if (Character.isDigit(c)) {
                encoded.append(c);
            } else if (Character.isLetter(c)) {
                encoded.append(rot13(c));
            } else if (i < raw.length() - 1) {
                char nc;
                boolean done = false;
                int count = 0;
                for (int n = i; !done; n++) {
                    if (n >= rawlen) {
                        break;
                    }

                    nc = raw.charAt(n);

                    if (nc != c) {
                        done = true;
                    } else {
                        count++;
                    }
                }
                if (count < 3) {
                    encoded.append(c);
                } else {
                    encoded.append("$").append(String.valueOf(count)).append(c);
                    i += count - 1;
                }
            } else {
                encoded.append(c);
            }
        }

        return encoded.toString();
    }

    public static String decode(String encoded) {
        StringBuilder decoded = new StringBuilder();
        int enlen = encoded.length();
        for (int i = 0; i < enlen; i++) {
            char c = encoded.charAt(i);
            if (c == '$') {
                char nc = encoded.charAt(i + 1);
                if (nc == '$') {
                    decoded.append('$');
                    i++;
                } else if (nc == '.') {
                    decoded.append('\\');
                    i++;
                } else if (nc == 'n') {
                    decoded.append(eol);
                    i++;
                } else if (Character.isDigit(nc)) {
                    int count = 0;
                    int nn = i + 1;
                    while (Character.isDigit(nc)) {
                        count = (count * 10);
                        count += (nc - '0');
                        nc = encoded.charAt(++nn);
                    }
                    for (int d = 0; d < count; d++) {
                        decoded.append(nc);
                    }
                    i = nn;
                }
            } else if (Character.isLetter(c)) {
                decoded.append(rot13(c));
            } else {
                decoded.append(c);
            }
        }

        return decoded.toString();
    }

    private static char rot13(char c) {
        if ((c >= 'a') && (c <= 'z')) {
            char dc = c += 13;
            if (dc > 'z') {
                dc -= 26;
            }
            return dc;
        } else if ((c >= 'A') && (c <= 'Z')) {
            char dc = c += 13;
            if (dc > 'Z') {
                dc -= 26;
            }
            return dc;
        } else {
            return c;
        }
    }

    public static String injectVersion(String text, String version) {
        Pattern pat = Pattern.compile("#{2,}");
        Matcher mat = pat.matcher(text);
        StringBuilder ret = new StringBuilder();
        int off = 0;

        while (mat.find(off)) {
            ret.append(text.substring(off, mat.start()));
            String repl = mat.group();
            ret.append(StringUtils.center(version, repl.length()));
            off = mat.end();
        }

        ret.append(text.substring(off));

        return ret.toString();
    }

    public static String getBanner(String version) {
        String encodedBanner = "$26 $34_$n$15 /$._$7 /$34 $.$n$14 /`/@),$4 |  Ba"
                + " orunys bs nyy bs gur nycnpnf   |$n$14 |  (~'  __| gbvyvat njnl ba "
                + "gur Ncnpur Nepuvin |$n$6 _,--.$3_/  |$4 $.$5  cebwrpg grnz, V jbhyq y"
                + "vxr gb$3 |$n$4 ,' ,$5 ($3 |$5 $.$5     jrypbzr lbh gb Nepuvin$6 |$"
                + "n$4 |  ($6 $.  /$6 |  $32#  |$n$5 $.  )$._/  ,_/$7 |$36 |$n$5 / /$3 "
                + "( |/$9 |     uggc://nepuvin.ncnpur.bet/     |$n$4 ( |$4 ( |$10 |     hf"
                + "ref@nepuvin.ncnpur.bet$7 |$n$5 $.|$5 $.|$11 $.$34_/$n$n";

        return injectVersion(decode(encodedBanner), version);
    }

    public static void display(String version) {
        String banner = getBanner(version);
        LoggerFactory.getLogger(Banner.class).info("{} {}{}", StringUtils.repeat("_", 25), eol, banner);
    }
}