//# 2 errors, 285 messages
//#
/*
    //#GlobalConfig.java:1:1: class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.ui.struts2.admin;

import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.PropertiesManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.plugins.PluginManager;
import org.apache.roller.weblogger.business.plugins.comment.WeblogEntryCommentPlugin;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
import org.apache.roller.weblogger.config.runtime.ConfigDef;
import org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs;
import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
import org.apache.struts2.interceptor.ParameterAware;


/**
 * Action which handles editing of global configuration.
 */
public class GlobalConfig extends UIAction implements ParameterAware {
    
    private static Log log = LogFactory.getLog(GlobalConfig.class);
    //#GlobalConfig.java:47: method: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init
    //#GlobalConfig.java:47: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig]
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.execute()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getCommentPlugins()[Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getGlobalConfigDef()Lorg/apache/roller/weblogger/config/runtime/ConfigDef;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getParameter(Ljava/lang/String;)Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getPluginsList()Ljava/util/List;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getProperties()Ljava/util/Map;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.isWeblogRequired()Z
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.myPrepare()V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.requiredUserRole()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.save()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setCommentPlugins([Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setGlobalConfigDef(Lorg/apache/roller/weblogger/config/runtime/ConfigDef;)V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setParameters(Ljava/util/Map;)V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setPluginsList(Ljava/util/List;)V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setProperties(Ljava/util/Map;)V
    //#output(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): log
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.execute()Ljava/lang/String; == &execute
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getCommentPlugins()[Ljava/lang/String; == &getCommentPlugins
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getGlobalConfigDef()Lorg/apache/roller/weblogger/config/runtime/ConfigDef; == &getGlobalConfigDef
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getParameter(Ljava/lang/String;)Ljava/lang/String; == &getParameter
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getPluginsList()Ljava/util/List; == &getPluginsList
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.getProperties()Ljava/util/Map; == &getProperties
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.isWeblogRequired()Z == &isWeblogRequired
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.myPrepare()V == &myPrepare
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.requiredUserRole()Ljava/lang/String; == &requiredUserRole
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.save()Ljava/lang/String; == &save
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setCommentPlugins([Ljava/lang/String;)V == &setCommentPlugins
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setGlobalConfigDef(Lorg/apache/roller/weblogger/config/runtime/ConfigDef;)V == &setGlobalConfigDef
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setParameters(Ljava/util/Map;)V == &setParameters
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setPluginsList(Ljava/util/List;)V == &setPluginsList
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): __Dispatch_Table.setProperties(Ljava/util/Map;)V == &setProperties
    //#post(org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init): init'ed(log)
    //#GlobalConfig.java:47: end of method: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig__static_init
    
    // the request parameters as <String, String[]>
    private Map params = Collections.EMPTY_MAP;
    
    // map of config properties
    private Map properties = Collections.EMPTY_MAP;
    
    // the runtime config def used to populate the display
    private ConfigDef globalConfigDef = null;
    
    // list of comment plugins
    private List<WeblogEntryCommentPlugin> pluginsList = Collections.EMPTY_LIST;
    
    // comment plugins that are enabled.  this is what the html form submits to
    private String[] commentPlugins = new String[0];
    
    
    public GlobalConfig() {
    //#GlobalConfig.java:65: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()
    //#GlobalConfig.java:65: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#input(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): java.util.Collections.EMPTY_LIST
    //#input(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): java.util.Collections.EMPTY_MAP
    //#input(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): new String[](GlobalConfig#1) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.commentPlugins.length
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.actionName
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.commentPlugins
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.desiredMenu
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.globalConfigDef
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.pageTitle
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.params
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.pluginsList
    //#output(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.properties
    //#new obj(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): new String[](GlobalConfig#1)
    //#presumption(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): init'ed(java.util.Collections.EMPTY_LIST)
    //#presumption(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): init'ed(java.util.Collections.EMPTY_MAP)
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.actionName == &"globalConfig"
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.commentPlugins == &new String[](GlobalConfig#1)
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.desiredMenu == &"admin"
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.globalConfigDef == null
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.pageTitle == &"configForm.title"
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.params == java.util.Collections.EMPTY_MAP
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): (soft) init'ed(this.params)
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.properties == this.params
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.pluginsList == java.util.Collections.EMPTY_LIST
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): (soft) init'ed(this.pluginsList)
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): new String[](GlobalConfig#1) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()): this.commentPlugins.length == 0
        this.actionName = "globalConfig";
        this.desiredMenu = "admin";
        this.pageTitle = "configForm.title";
    }
    //#GlobalConfig.java:69: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig()
    
    
    @Override
    public boolean isWeblogRequired() {
        return false;
    //#GlobalConfig.java:74: method: bool org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.isWeblogRequired()
    //#output(bool isWeblogRequired()): return_value
    //#post(bool isWeblogRequired()): return_value == 0
    //#GlobalConfig.java:74: end of method: bool org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.isWeblogRequired()
    }
    
    @Override
    public String requiredUserRole() {
        return "admin";
    //#GlobalConfig.java:79: method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.requiredUserRole()
    //#output(String requiredUserRole()): return_value
    //#post(String requiredUserRole()): return_value == &"admin"
    //#GlobalConfig.java:79: end of method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.requiredUserRole()
    }
    
    
    /**
     * Prepare action by loading runtime properties map.
     */
    @Override
    public void myPrepare() {
        try {
            // just grab our properties map and make it available to the action
            PropertiesManager mgr = WebloggerFactory.getWeblogger().getPropertiesManager();
    //#GlobalConfig.java:90: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.myPrepare()
    //#GlobalConfig.java:90: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#GlobalConfig.java:90: Warning: method not available
    //#    -- call on PropertiesManager org.apache.roller.weblogger.business.Weblogger:getPropertiesManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: PropertiesManager org.apache.roller.weblogger.business.Weblogger:getPropertiesManager()
    //#input(void myPrepare()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig]
    //#input(void myPrepare()): __Descendant_Table[others]
    //#input(void myPrepare()): __Dispatch_Table.setGlobalConfigDef(Lorg/apache/roller/weblogger/config/runtime/ConfigDef;)V
    //#input(void myPrepare()): __Dispatch_Table.setPluginsList(Ljava/util/List;)V
    //#input(void myPrepare()): __Dispatch_Table.setProperties(Ljava/util/Map;)V
    //#input(void myPrepare()): log
    //#input(void myPrepare()): this
    //#input(void myPrepare()): this.__Tag
    //#output(void myPrepare()): this.globalConfigDef
    //#output(void myPrepare()): this.pluginsList
    //#output(void myPrepare()): this.properties
    //#pre[5] (void myPrepare()): this.__Tag == org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig
    //#pre[1] (void myPrepare()): (soft) log != null
    //#presumption(void myPrepare()): java.util.Iterator:next(...)@101 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.Weblogger:getPluginManager(...)@108 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.Weblogger:getPropertiesManager(...)@90 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@108 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@90 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getRuntimeConfigDefs(...)@99 != null
    //#presumption(void myPrepare()): org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs:getConfigDefs(...)@100 != null
    //#post(void myPrepare()): possibly_updated(this.globalConfigDef)
    //#post(void myPrepare()): init'ed(this.pluginsList)
    //#post(void myPrepare()): possibly_updated(this.properties)
    //#test_vector(void myPrepare()): java.lang.String:equals(...)@102: {0}, {1}
    //#test_vector(void myPrepare()): java.util.Iterator:hasNext(...)@101: {0}, {1}
            setProperties(mgr.getProperties());
    //#GlobalConfig.java:91: Warning: method not available
    //#    -- call on Map org.apache.roller.weblogger.business.PropertiesManager:getProperties()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: Map org.apache.roller.weblogger.business.PropertiesManager:getProperties()
        } catch (WebloggerException ex) {
            log.error("Error getting runtime properties map", ex);
    //#GlobalConfig.java:93: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("Unexpected error accessing Roller properties");
    //#GlobalConfig.java:95: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addError(String)
        }
        
        // set config def used to draw the view
        RuntimeConfigDefs defs = WebloggerRuntimeConfig.getRuntimeConfigDefs();
    //#GlobalConfig.java:99: Warning: method not available
    //#    -- call on RuntimeConfigDefs org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getRuntimeConfigDefs()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: RuntimeConfigDefs org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getRuntimeConfigDefs()
        List<ConfigDef> configDefs = defs.getConfigDefs();
    //#GlobalConfig.java:100: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs:getConfigDefs()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: List org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs:getConfigDefs()
        for(ConfigDef configDef : configDefs) {
            if("global-properties".equals(configDef.getName())) {
    //#GlobalConfig.java:102: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.runtime.ConfigDef:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.runtime.ConfigDef:getName()
                setGlobalConfigDef(configDef);
            }
        }
        
        // load plugins list
        PluginManager pmgr = WebloggerFactory.getWeblogger().getPluginManager();
    //#GlobalConfig.java:108: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#GlobalConfig.java:108: Warning: method not available
    //#    -- call on PluginManager org.apache.roller.weblogger.business.Weblogger:getPluginManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: PluginManager org.apache.roller.weblogger.business.Weblogger:getPluginManager()
        setPluginsList(pmgr.getCommentPlugins());
    //#GlobalConfig.java:109: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.plugins.PluginManager:getCommentPlugins()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void myPrepare()
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.plugins.PluginManager:getCommentPlugins()
    }
    //#GlobalConfig.java:110: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.myPrepare()
    
    
    /**
     * Display global properties editor form.
     */
    @Override
    public String execute() {
        
        // setup array of configured plugins
        if (!StringUtils.isEmpty(WebloggerRuntimeConfig.getProperty("users.comments.plugins"))) {
    //#GlobalConfig.java:120: method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.execute()
    //#GlobalConfig.java:120: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String execute()
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#GlobalConfig.java:120: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String execute()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#input(String execute()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig]
    //#input(String execute()): __Descendant_Table[others]
    //#input(String execute()): __Dispatch_Table.setCommentPlugins([Ljava/lang/String;)V
    //#input(String execute()): this
    //#input(String execute()): this.__Tag
    //#output(String execute()): return_value
    //#output(String execute()): this.commentPlugins
    //#pre[3] (String execute()): (soft) this.__Tag == org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig
    //#post(String execute()): return_value == &"success"
    //#post(String execute()): possibly_updated(this.commentPlugins)
    //#test_vector(String execute()): org.apache.commons.lang.StringUtils:isEmpty(...)@120: {1}, {0}
            setCommentPlugins(StringUtils.split(WebloggerRuntimeConfig.getProperty("users.comments.plugins"), ","));
    //#GlobalConfig.java:121: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String execute()
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#GlobalConfig.java:121: Warning: method not available
    //#    -- call on String[] org.apache.commons.lang.StringUtils:split(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String execute()
    //#    unanalyzed callee: String[] org.apache.commons.lang.StringUtils:split(String, String)
        }
        
        return SUCCESS;
    //#GlobalConfig.java:124: end of method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.execute()
    }
    
    
    /**
     * Save global properties.
     */
    public String save() {
        
        // only set values for properties that are already defined
        String propName = null;
    //#GlobalConfig.java:134: method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.save()
    //#GlobalConfig.java:134: Warning: unused assignment
    //#    unused assignment into propName
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    Attribs:  Uncertain
    //#input(String save()): "Checking property ["._tainted
    //#input(String save()): "Request value is ["._tainted
    //#input(String save()): "Setting new value for ["._tainted
    //#input(String save()): "]"._tainted
    //#input(String save()): "false"._tainted
    //#input(String save()): "true"._tainted
    //#input(String save()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig]
    //#input(String save()): __Descendant_Table[others]
    //#input(String save()): __Dispatch_Table.getCommentPlugins()[Ljava/lang/String;
    //#input(String save()): __Dispatch_Table.getProperties()Ljava/util/Map;
    //#input(String save()): log
    //#input(String save()): this
    //#input(String save()): this.__Tag
    //#input(String save()): this.commentPlugins
    //#input(String save()): this.commentPlugins.length
    //#input(String save()): this.params
    //#input(String save()): this.properties
    //#output(String save()): return_value
    //#pre[3] (String save()): this.__Tag == org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig
    //#pre[4] (String save()): this.commentPlugins != null
    //#pre[7] (String save()): this.properties != null
    //#pre[1] (String save()): (soft) log != null
    //#pre[6] (String save()): (soft) this.params != null
    //#presumption(String save()): java.util.Map:get(...)@140 != null
    //#presumption(String save()): java.util.Map:get(...)@173 != null
    //#presumption(String save()): java.util.Map:keySet(...)@137 != null
    //#presumption(String save()): log@171 != null
    //#presumption(String save()): org.apache.roller.weblogger.business.Weblogger:getPropertiesManager(...)@179 != null
    //#presumption(String save()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@179 != null
    //#presumption(String save()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@181 != null
    //#presumption(String save()): org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue(...)@150 != null
    //#presumption(String save()): org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue(...)@150 != null
    //#post(String save()): return_value == &"success"
    //#unanalyzed(String save()): Effects-of-calling:java.util.Map:get
    //#test_vector(String save()): this.commentPlugins.length: {0}, {1..+Inf}
    //#test_vector(String save()): java.lang.String:equals(...)@150: {1}, {0}
    //#test_vector(String save()): java.lang.String:equals(...)@150: {0}, {1}
    //#test_vector(String save()): java.util.Iterator:hasNext(...)@138: {0}, {1}
    //#test_vector(String save()): org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue(...)@150: Addr_Set{null}, Inverse{null}
        RuntimeConfigProperty updProp = null;
    //#GlobalConfig.java:135: Warning: unused assignment
    //#    unused assignment into updProp
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    Attribs:  Uncertain
        String incomingProp = null;
    //#GlobalConfig.java:136: Warning: unused assignment
    //#    unused assignment into incomingProp
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    Attribs:  Uncertain
        Iterator propsIT = getProperties().keySet().iterator();
        while(propsIT.hasNext()) {
            propName = (String) propsIT.next();
            updProp = (RuntimeConfigProperty) getProperties().get(propName);
            incomingProp = this.getParameter(updProp.getName());
    //#GlobalConfig.java:141: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getName()
    //#GlobalConfig.java:141: ?use of default init
    //#    init'ed(Obj_Id#608:getParameter(...))
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    basic block: bb_3
    //#    assertion: init'ed(Obj_Id#608:getParameter(...))
    //#    VN: getParameter(...)
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
            
            log.debug("Checking property ["+propName+"]");
    //#GlobalConfig.java:143: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            log.debug("Request value is ["+incomingProp+"]");
    //#GlobalConfig.java:144: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            
            // some special treatment for booleans
            // this is a bit hacky since we are assuming that any prop
            // with a value of "true" or "false" is meant to be a boolean
            // it may not always be the case, but we should be okay for now
            if( updProp.getValue() != null // null check needed w/Oracle
    //#GlobalConfig.java:150: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue()
                    && (updProp.getValue().equals("true") || updProp.getValue().equals("false"))) {
                
                if(incomingProp == null || !incomingProp.equals("on"))
    //#GlobalConfig.java:153: Warning: test always goes same way
    //#    test predetermined because incomingProp == null
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    from bb: bb_6
    //#    live edge: bb_6-->bb_8
    //#    tested vn: getParameter(...) == null
    //#    tested vn values: {1}
    //#GlobalConfig.java:153: Warning: dead code
    //#    dead code here because incomingProp == null
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    dead bb: bb_7
                    incomingProp = "false";
                else
                    incomingProp = "true";
    //#GlobalConfig.java:156: Warning: dead code continues
    //#    dead code continues
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    dead bb: bb_9
            }
            
            // only work on props that were submitted with the request
            if(incomingProp != null) {
                log.debug("Setting new value for ["+propName+"]");
    //#GlobalConfig.java:161: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                
                // NOTE: the old way had some locale sensitive way to do this??
                updProp.setValue(incomingProp.trim());
    //#GlobalConfig.java:164: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.RuntimeConfigProperty:setValue(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.RuntimeConfigProperty:setValue(String)
            }
        }
        
        // special handling for comment plugins
        String enabledPlugins = "";
        if(getCommentPlugins().length > 0) {
            enabledPlugins = StringUtils.join(getCommentPlugins(), ",");
    //#GlobalConfig.java:171: Warning: method not available
    //#    -- call on String org.apache.commons.lang.StringUtils:join(Object[], String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: String org.apache.commons.lang.StringUtils:join(Object[], String)
        }
        RuntimeConfigProperty prop = 
                    (RuntimeConfigProperty) getProperties().get("users.comments.plugins");
        prop.setValue(enabledPlugins);
    //#GlobalConfig.java:175: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.RuntimeConfigProperty:setValue(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.RuntimeConfigProperty:setValue(String)
            
        try {
            // save 'em and flush
            PropertiesManager mgr = WebloggerFactory.getWeblogger().getPropertiesManager();
    //#GlobalConfig.java:179: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#GlobalConfig.java:179: Warning: method not available
    //#    -- call on PropertiesManager org.apache.roller.weblogger.business.Weblogger:getPropertiesManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: PropertiesManager org.apache.roller.weblogger.business.Weblogger:getPropertiesManager()
            mgr.saveProperties(getProperties());
    //#GlobalConfig.java:180: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.PropertiesManager:saveProperties(Map)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.PropertiesManager:saveProperties(Map)
            WebloggerFactory.getWeblogger().flush();
    //#GlobalConfig.java:181: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#GlobalConfig.java:181: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
            
            // notify user of our success
            addMessage("weblogEdit.changesSaved");
    //#GlobalConfig.java:184: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addMessage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addMessage(String)
            
        } catch (WebloggerException ex) {
            log.error("Error saving roller properties", ex);
    //#GlobalConfig.java:187: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("error.update.rollerConfig");
    //#GlobalConfig.java:189: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String save()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig:addError(String)
        }
                
        return SUCCESS;
    //#GlobalConfig.java:192: end of method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.save()
    }
    
    
    public void setParameters(Map parameters) {
        this.params = parameters;
    //#GlobalConfig.java:197: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setParameters(Map)
    //#input(void setParameters(Map)): " = "._tainted
    //#input(void setParameters(Map)): log
    //#input(void setParameters(Map)): parameters
    //#input(void setParameters(Map)): this
    //#output(void setParameters(Map)): this.params
    //#pre[1] (void setParameters(Map)): log != null
    //#pre[2] (void setParameters(Map)): (soft) parameters != null
    //#presumption(void setParameters(Map)): java.util.Map:keySet(...)@201 != null
    //#post(void setParameters(Map)): this.params == parameters
    //#post(void setParameters(Map)): (soft) this.params != null
    //#test_vector(void setParameters(Map)): java.util.Iterator:hasNext(...)@202: {0}, {1}
    //#test_vector(void setParameters(Map)): org.apache.commons.logging.Log:isDebugEnabled(...)@199: {0}, {1}
        
        if(log.isDebugEnabled()) {
    //#GlobalConfig.java:199: Warning: method not available
    //#    -- call on bool org.apache.commons.logging.Log:isDebugEnabled()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void setParameters(Map)
    //#    unanalyzed callee: bool org.apache.commons.logging.Log:isDebugEnabled()
            log.debug("Parameter map:");
    //#GlobalConfig.java:200: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void setParameters(Map)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            Set<String> keys = parameters.keySet();
            for(String key : keys) {
                log.debug(key+" = "+parameters.get(key));
    //#GlobalConfig.java:203: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: void setParameters(Map)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            }
        }
    }
    //#GlobalConfig.java:206: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setParameters(Map)
    
    // convenience method for getting a single parameter as a String
    private String getParameter(String key) {
        
        String[] p = (String[]) this.params.get(key);
    //#GlobalConfig.java:211: method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getParameter(String)
    //#input(String getParameter(String)): key
    //#input(String getParameter(String)): this
    //#input(String getParameter(String)): this.params
    //#output(String getParameter(String)): return_value
    //#pre[3] (String getParameter(String)): this.params != null
    //#post(String getParameter(String)): return_value == null
    //#test_vector(String getParameter(String)): java.util.Map:get(...)@211: Addr_Set{null}, Inverse{null}
    //#test_vector(String getParameter(String)): p.length@211: {0}, {1..+Inf}
        if(p != null && p.length > 0) {
            return p[0];
    //#GlobalConfig.java:213: ?use of default init
    //#    init'ed(p[0])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
    //#    method: String getParameter(String)
    //#    basic block: bb_3
    //#    assertion: init'ed(p[0])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
        }
        return null;
    //#GlobalConfig.java:215: end of method: String org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getParameter(String)
    }
    
    
    public Map getProperties() {
        return properties;
    //#GlobalConfig.java:220: method: Map org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getProperties()
    //#input(Map getProperties()): this
    //#input(Map getProperties()): this.properties
    //#output(Map getProperties()): return_value
    //#pre[2] (Map getProperties()): init'ed(this.properties)
    //#post(Map getProperties()): return_value == this.properties
    //#post(Map getProperties()): init'ed(return_value)
    //#GlobalConfig.java:220: end of method: Map org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getProperties()
    }

    public void setProperties(Map properties) {
        this.properties = properties;
    //#GlobalConfig.java:224: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setProperties(Map)
    //#input(void setProperties(Map)): properties
    //#input(void setProperties(Map)): this
    //#output(void setProperties(Map)): this.properties
    //#post(void setProperties(Map)): this.properties == properties
    //#post(void setProperties(Map)): init'ed(this.properties)
    }
    //#GlobalConfig.java:225: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setProperties(Map)

    public ConfigDef getGlobalConfigDef() {
        return globalConfigDef;
    //#GlobalConfig.java:228: method: ConfigDef org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getGlobalConfigDef()
    //#input(ConfigDef getGlobalConfigDef()): this
    //#input(ConfigDef getGlobalConfigDef()): this.globalConfigDef
    //#output(ConfigDef getGlobalConfigDef()): return_value
    //#pre[2] (ConfigDef getGlobalConfigDef()): init'ed(this.globalConfigDef)
    //#post(ConfigDef getGlobalConfigDef()): return_value == this.globalConfigDef
    //#post(ConfigDef getGlobalConfigDef()): init'ed(return_value)
    //#GlobalConfig.java:228: end of method: ConfigDef org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getGlobalConfigDef()
    }

    public void setGlobalConfigDef(ConfigDef globalConfigDef) {
        this.globalConfigDef = globalConfigDef;
    //#GlobalConfig.java:232: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setGlobalConfigDef(ConfigDef)
    //#input(void setGlobalConfigDef(ConfigDef)): globalConfigDef
    //#input(void setGlobalConfigDef(ConfigDef)): this
    //#output(void setGlobalConfigDef(ConfigDef)): this.globalConfigDef
    //#post(void setGlobalConfigDef(ConfigDef)): this.globalConfigDef == globalConfigDef
    //#post(void setGlobalConfigDef(ConfigDef)): init'ed(this.globalConfigDef)
    }
    //#GlobalConfig.java:233: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setGlobalConfigDef(ConfigDef)
    
    public List<WeblogEntryCommentPlugin> getPluginsList() {
        return pluginsList;
    //#GlobalConfig.java:236: method: List org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getPluginsList()
    //#input(List getPluginsList()): this
    //#input(List getPluginsList()): this.pluginsList
    //#output(List getPluginsList()): return_value
    //#pre[2] (List getPluginsList()): init'ed(this.pluginsList)
    //#post(List getPluginsList()): return_value == this.pluginsList
    //#post(List getPluginsList()): init'ed(return_value)
    //#GlobalConfig.java:236: end of method: List org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getPluginsList()
    }

    public void setPluginsList(List<WeblogEntryCommentPlugin> pluginsList) {
        this.pluginsList = pluginsList;
    //#GlobalConfig.java:240: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setPluginsList(List)
    //#input(void setPluginsList(List)): pluginsList
    //#input(void setPluginsList(List)): this
    //#output(void setPluginsList(List)): this.pluginsList
    //#post(void setPluginsList(List)): this.pluginsList == pluginsList
    //#post(void setPluginsList(List)): init'ed(this.pluginsList)
    }
    //#GlobalConfig.java:241: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setPluginsList(List)
    
    public String[] getCommentPlugins() {
        return commentPlugins;
    //#GlobalConfig.java:244: method: String[] org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getCommentPlugins()
    //#input(String[] getCommentPlugins()): this
    //#input(String[] getCommentPlugins()): this.commentPlugins
    //#output(String[] getCommentPlugins()): return_value
    //#pre[2] (String[] getCommentPlugins()): init'ed(this.commentPlugins)
    //#post(String[] getCommentPlugins()): return_value == this.commentPlugins
    //#post(String[] getCommentPlugins()): init'ed(return_value)
    //#GlobalConfig.java:244: end of method: String[] org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.getCommentPlugins()
    }

    public void setCommentPlugins(String[] commentPlugins) {
        this.commentPlugins = commentPlugins;
    //#GlobalConfig.java:248: method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setCommentPlugins(String[])
    //#input(void setCommentPlugins(String[])): commentPlugins
    //#input(void setCommentPlugins(String[])): this
    //#output(void setCommentPlugins(String[])): this.commentPlugins
    //#post(void setCommentPlugins(String[])): this.commentPlugins == commentPlugins
    //#post(void setCommentPlugins(String[])): init'ed(this.commentPlugins)
    }
    //#GlobalConfig.java:249: end of method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig.setCommentPlugins(String[])
    
}
    //#GlobalConfig.java:: end of class: org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig
