]> source.dussan.org Git - archiva.git/blob
27775bf083a92fd553b267b4931265e0b3279974
[archiva.git] /
1 package org.apache.maven.archiva.web.startup;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import java.util.regex.Matcher;
23 import java.util.regex.Pattern;
24
25 import org.apache.commons.lang.StringUtils;
26 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
27 import org.slf4j.LoggerFactory;
28
29 /**
30  * Banner 
31  *
32  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
33  * @version $Id$
34  */
35 public class Banner
36 {
37     public static String encode( String raw )
38     {
39         StringBuffer encoded = new StringBuffer();
40         int rawlen = raw.length();
41
42         for ( int i = 0; i < rawlen; i++ )
43         {
44             char c = raw.charAt( i );
45             if ( c == '\\' )
46             {
47                 encoded.append( "$." );
48             }
49             else if ( c == '$' )
50             {
51                 encoded.append( "$$" );
52             }
53             else if ( c == '\n' )
54             {
55                 encoded.append( "$n" );
56             }
57             else if ( Character.isDigit( c ) )
58             {
59                 encoded.append( c );
60             }
61             else if ( Character.isLetter( c ) )
62             {
63                 encoded.append( rot13( c ) );
64             }
65             else if ( i < raw.length() - 1 )
66             {
67                 char nc;
68                 boolean done = false;
69                 int count = 0;
70                 for ( int n = i; !done; n++ )
71                 {
72                     if ( n >= rawlen )
73                     {
74                         break;
75                     }
76
77                     nc = raw.charAt( n );
78
79                     if ( nc != c )
80                     {
81                         done = true;
82                     }
83                     else
84                     {
85                         count++;
86                     }
87                 }
88                 if ( count < 3 )
89                 {
90                     encoded.append( c );
91                 }
92                 else
93                 {
94                     encoded.append( "$" ).append( String.valueOf( count ) ).append( c );
95                     i += count - 1;
96                 }
97             }
98             else
99             {
100                 encoded.append( c );
101             }
102         }
103
104         return encoded.toString();
105     }
106
107     public static String decode( String encoded )
108     {
109         StringBuffer decoded = new StringBuffer();
110         int enlen = encoded.length();
111         for ( int i = 0; i < enlen; i++ )
112         {
113             char c = encoded.charAt( i );
114             if ( c == '$' )
115             {
116                 char nc = encoded.charAt( i + 1 );
117                 if ( nc == '$' )
118                 {
119                     decoded.append( '$' );
120                     i++;
121                 }
122                 else if ( nc == '.' )
123                 {
124                     decoded.append( '\\' );
125                     i++;
126                 }
127                 else if ( nc == 'n' )
128                 {
129                     decoded.append( '\n' );
130                     i++;
131                 }
132                 else if ( Character.isDigit( nc ) )
133                 {
134                     int count = 0;
135                     int nn = i + 1;
136                     while ( Character.isDigit( nc ) )
137                     {
138                         count = ( count * 10 );
139                         count += ( nc - '0' );
140                         nc = encoded.charAt( ++nn );
141                     }
142                     for ( int d = 0; d < count; d++ )
143                     {
144                         decoded.append( nc );
145                     }
146                     i = nn;
147                 }
148             }
149             else if ( Character.isLetter( c ) )
150             {
151                 decoded.append( rot13( c ) );
152             }
153             else
154             {
155                 decoded.append( c );
156             }
157         }
158
159         return decoded.toString();
160     }
161
162     private static char rot13( char c )
163     {
164         if ( ( c >= 'a' ) && ( c <= 'z' ) )
165         {
166             char dc = c += 13;
167             if ( dc > 'z' )
168             {
169                 dc -= 26;
170             }
171             return dc;
172         }
173         else if ( ( c >= 'A' ) && ( c <= 'Z' ) )
174         {
175             char dc = c += 13;
176             if ( dc > 'Z' )
177             {
178                 dc -= 26;
179             }
180             return dc;
181         }
182         else
183         {
184             return c;
185         }
186     }
187
188     public static String injectVersion( String text, String version )
189     {
190         Pattern pat = Pattern.compile( "#{2,}" );
191         Matcher mat = pat.matcher( text );
192         StringBuffer ret = new StringBuffer();
193         int off = 0;
194
195         while ( mat.find( off ) )
196         {
197             ret.append( text.substring( off, mat.start() ) );
198             String repl = mat.group();
199             ret.append( StringUtils.center( version, repl.length() ) );
200             off = mat.end();
201         }
202
203         ret.append( text.substring( off ) );
204
205         return ret.toString();
206     }
207
208     public static String getBanner( String version )
209     {
210         String encodedBanner = "$26 $34_$n$15 /$._$7 /$34 $.$n$14 /`/@),$4 |  Ba" +
211                 " orunys bs nyy bs gur nycnpn'f  |$n$14 |  (~'  __| gbvyvat njnl ba " +
212                 "gur Ncnpur Nepuvin |$n$6 _,--.$3_/  |$4 $.$5  cebwrpg grnz, V jbhyq y" +
213                 "vxr gb$3 |$n$4 ,' ,$5 ($3 |$5 $.$5     jrypbzr lbh gb Nepuvin$6 |$" +
214                 "n$4 |  ($6 $.  /$6 |  $32#  |$n$5 $.  )$._/  ,_/$7 |$36 |$n$5 / /$3 " +
215                 "( |/$9 |     uggc://nepuvin.ncnpur.bet/     |$n$4 ( |$4 ( |$10 |     hf" +
216                 "ref@nepuvin.ncnpur.bet$7 |$n$5 $.|$5 $.|$11 $.$34_/$n$n";
217
218         return injectVersion( decode( encodedBanner ), version );
219     }
220
221     public void display() 
222     {
223         String banner = getBanner( ArchivaVersion.determineVersion( this.getClass().getClassLoader() ) );
224         LoggerFactory.getLogger( Banner.class ).info( StringUtils.repeat( "_", 25 ) + "\n" + banner );
225     }
226 }