001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.chain.impl;
018    
019    
020    import org.apache.commons.chain.Command;
021    import org.apache.commons.chain.Context;
022    
023    
024    /**
025     * <p>Implementation of {@link Command} that simply logs its identifier
026     * and returns.</p>
027     *
028     * @author Craig R. McClanahan
029     * @version $Revision: 480477 $ $Date: 2006-11-29 08:34:52 +0000 (Wed, 29 Nov 2006) $
030     */
031    
032    public class NonDelegatingCommand implements Command {
033    
034    
035        // ------------------------------------------------------------ Constructor
036    
037    
038        public NonDelegatingCommand() {
039        this("");
040        }
041    
042    
043        // Construct an instance that will log the specified identifier
044        public NonDelegatingCommand(String id) {
045            this.id = id;
046        }
047    
048    
049        // ----------------------------------------------------- Instance Variables
050    
051    
052        // The identifier to log for this Command instance
053        protected String id = null;
054    
055        String getId() {
056            return (this.id);
057        }
058    
059        public void setId(String id) {
060        this.id = id;
061        }
062    
063    
064        // -------------------------------------------------------- Command Methods
065    
066    
067        // Execution method for this Command
068        public boolean execute(Context context) throws Exception {
069    
070            if (context == null) {
071                throw new IllegalArgumentException();
072            }
073            log(context, id);
074            return (true);
075    
076        }
077    
078    
079    
080        // ------------------------------------------------------ Protected Methods
081    
082    
083        /**
084         * <p>Log the specified <code>id</code> into a StringBuffer attribute
085         * named "log" in the specified <code>context</code>, creating it if
086         * necessary.</p>
087         *
088         * @param context The {@link Context} into which we log the identifiers
089         * @param id The identifier to be logged
090         */
091        protected void log(Context context, String id) {
092            StringBuffer sb = (StringBuffer) context.get("log");
093            if (sb == null) {
094                sb = new StringBuffer();
095                context.put("log", sb);
096            }
097            if (sb.length() > 0) {
098                sb.append('/');
099            }
100            sb.append(id);
101        }
102    
103    
104    }