]> source.dussan.org Git - archiva.git/blob
858e8736d934dfd2fcfc5f263edf97af7176a1df
[archiva.git] /
1 package org.apache.maven.archiva.common.spring;
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.List;
23 import java.util.StringTokenizer;
24
25 import javax.xml.namespace.QName;
26 import javax.xml.xpath.XPathFunction;
27 import javax.xml.xpath.XPathFunctionException;
28 import javax.xml.xpath.XPathFunctionResolver;
29
30 /**
31  * XPathFunction to convert plexus property-name to Spring propertyName.
32  *
33  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
34  * @since 1.1
35  */
36 public class CamelCaseXpathFunction
37     implements XPathFunction, XPathFunctionResolver
38 {
39
40     private static final QName name = new QName( "http://plexus.codehaus.org/", "camelCase" );
41
42     /**
43      * {@inheritDoc}
44      *
45      * @see javax.xml.xpath.XPathFunctionResolver#resolveFunction(javax.xml.namespace.QName,
46      * int)
47      */
48     public XPathFunction resolveFunction( QName functionName, int arity )
49     {
50         if ( name.equals( functionName.getLocalPart() ) && arity >= 1 )
51         {
52             return new CamelCaseXpathFunction();
53         }
54         return null;
55     }
56
57     /**
58      * {@inheritDoc}
59      *
60      * @see javax.xml.xpath.XPathFunction#evaluate(java.util.List)
61      */
62     public Object evaluate( List args )
63         throws XPathFunctionException
64     {
65         return toCamelCase( (String) args.get( 0 ) );
66     }
67
68     public static String toCamelCase( String string )
69     {
70         StringBuilder camelCase = new StringBuilder();
71         boolean first = true;
72
73         StringTokenizer tokenizer = new StringTokenizer( string.toLowerCase(), "-" );
74         while ( tokenizer.hasMoreTokens() )
75         {
76             String token = tokenizer.nextToken();
77             if ( first )
78             {
79                 camelCase.append( token.charAt( 0 ) );
80                 first = false;
81             }
82             else
83             {
84                 camelCase.append( Character.toUpperCase( token.charAt( 0 ) ) );
85             }
86             camelCase.append( token.substring( 1, token.length() ) );
87         }
88         return camelCase.toString();
89     }
90 }