001    /* 
002        Copyright (C) 2007 JSPWiki Developer Group
003    
004        Licensed to the Apache Software Foundation (ASF) under one
005        or more contributor license agreements.  See the NOTICE file
006        distributed with this work for additional information
007        regarding copyright ownership.  The ASF licenses this file
008        to you under the Apache License, Version 2.0 (the
009        "License"); you may not use this file except in compliance
010        with the License.  You may obtain a copy of the License at
011    
012           http://www.apache.org/licenses/LICENSE-2.0
013    
014        Unless required by applicable law or agreed to in writing,
015        software distributed under the License is distributed on an
016        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017        KIND, either express or implied.  See the License for the
018        specific language governing permissions and limitations
019        under the License.  
020     */
021    package org.apache.wiki.plugin;
022    
023    import java.util.Map;
024    
025    import org.apache.wiki.WikiContext;
026    import org.apache.wiki.WikiEngine;
027    import org.apache.wiki.api.exceptions.PluginException;
028    import org.apache.wiki.api.plugin.WikiPlugin;
029    import org.apache.wiki.util.TextUtil;
030    
031    /**
032     * Outputs an image with the supplied text as the <tt>title</tt> which is shown as a tooltip by
033     * most browsers. This is intended for short one line comments.
034     * <p>
035     * See http://www.456bereastreet.com/archive/200412/the_alt_and_title_attributes/ for discussion on
036     * alt and title attributes.
037     * <p>
038     * Adaption of the CommentPlugin written by Scott Hulbert, cleaned up and generalized, but basically
039     * his concept.
040     * <p>
041     * 
042     *  <p>Parameters : </p>
043     *  <ul>
044     *  <li><b>_cmdline</b> - the commentText</li>
045     *  </ul>
046     *  
047     */
048    public class Note implements WikiPlugin
049    {
050        /**
051         *  Property name for setting the image for the note.  Value is <tt>{@value}</tt>.
052         */
053        public static final String PROP_NOTE_IMAGE    = "notePlugin.imageName";
054        
055        /**
056         *  The default name for the note.  Value is <tt>{@value}</tt>.
057         */
058        public static final String DEFAULT_NOTE_IMAGE = "note.png";
059    
060        /**
061         *  {@inheritDoc}
062         */
063        public String execute(WikiContext context, Map<String, String> params) throws PluginException
064        {
065            String commandline = params.get(DefaultPluginManager.PARAM_CMDLINE);
066            if (commandline == null || commandline.length() == 0)
067            {
068                return "Unable to obtain plugin command line from parameter'" + DefaultPluginManager.PARAM_CMDLINE + "'"; // I18N
069            }
070    
071            String commentImage = imageUrl(context);
072    
073            String commentText = clean(commandline);
074    
075            return "<img src='" + commentImage + "' alt=\"Comment: " + 
076                   commentText + "\" title=\"" + commentText + "\"/>";
077        }
078    
079        private String imageUrl( WikiContext ctx )
080        {
081            WikiEngine engine = ctx.getEngine();
082            String commentImage = engine.getWikiProperties().getProperty(PROP_NOTE_IMAGE,
083                                                                         DEFAULT_NOTE_IMAGE);
084    
085            commentImage = "images/"+commentImage;
086            
087            String resource = engine.getTemplateManager().findResource( ctx, 
088                                                                        engine.getTemplateDir(), 
089                                                                        commentImage );
090    
091            return ctx.getURL( WikiContext.NONE, resource );
092        }
093    
094    
095        /**
096         *  Cleans the side.
097         * 
098         * @param commandline
099         */
100        private String clean(String commandline)
101        {
102            return TextUtil.replaceEntities( commandline );
103        }
104    
105    }
106