Java tutorial
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); } }