001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.rules.closure;
017    
018    import org.springframework.rules.closure.Closure;
019    import org.springframework.rules.closure.support.AbstractClosure;
020    
021    /**
022     * Returns a trimmed copy of the string form of an object.
023     * 
024     * @author Keith Donald
025     */
026    public class StringTrimmer extends AbstractClosure {
027            private static final StringTrimmer INSTANCE = new StringTrimmer();
028    
029            /**
030             * Returns the shared StringTrimmer instance--this is possible as the
031             * default instance is immutable and stateless.
032             * 
033             * @return the shared instance
034             */
035            public static Closure instance() {
036                    return INSTANCE;
037            }
038    
039            /**
040             * Evaluate the string form of the object, returning a trimmed (no
041             * leading/trailing whitespace) copy of the string.
042             * 
043             * @return The trimmed string
044             * @see Closure#call(java.lang.Object)
045             */
046            public Object call(Object argument) {
047                    return String.valueOf(argument).trim();
048            }
049    
050            public String toString() {
051                    return "trim(arg)";
052            }
053    
054    }