//# 1 errors, 630 messages
//#
/*
    //#SharedThemeFromDir.java:1:1: class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
 * 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.business.themes;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.pojos.ThemeResource;
import org.apache.roller.weblogger.pojos.ThemeTemplate;
import org.apache.roller.weblogger.pojos.WeblogTemplate;


/**
 * The Theme object encapsulates all elements of a single weblog theme.  It
 * is used mostly to contain all the templates for a theme, but does contain
 * other theme related attributes such as name, last modifed date, etc.
 */
public class SharedThemeFromDir extends SharedTheme {
    
    private static Log log = LogFactory.getLog(SharedThemeFromDir.class);
    //#SharedThemeFromDir.java:47: method: org.apache.roller.weblogger.business.themes.SharedThemeFromDir.org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init
    //#SharedThemeFromDir.java:47: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir]
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.addTemplate(Lorg/apache/roller/weblogger/pojos/ThemeTemplate;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.compareTo(Ljava/lang/Object;)I
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getDefaultTemplate()Lorg/apache/roller/weblogger/pojos/ThemeTemplate;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getDescription()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getId()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getLastModified()Ljava/util/Date;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getPreviewImage()Lorg/apache/roller/weblogger/pojos/ThemeResource;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getResource(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeResource;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getResources()Ljava/util/List;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getStylesheet()Lorg/apache/roller/weblogger/pojos/ThemeTemplate;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByAction(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByLink(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByName(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplates()Ljava/util/List;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.isEnabled()Z
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.loadTemplateFile(Ljava/io/File;)Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.loadThemeFromDisk()V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setDescription(Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setEnabled(Z)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setId(Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setLastModified(Ljava/util/Date;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setResource(Ljava/lang/String;Lorg/apache/roller/weblogger/business/themes/SharedThemeResourceFromDir;)V
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): log
    //#output(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): org/apache/roller/weblogger/business/themes/SharedTheme.__Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir]
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): org/apache/roller/weblogger/business/themes/SharedTheme.__Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.addTemplate(Lorg/apache/roller/weblogger/pojos/ThemeTemplate;)V == &addTemplate
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.compareTo(Ljava/lang/Object;)I == &org/apache/roller/weblogger/business/themes/SharedTheme.compareTo
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getAuthor()Ljava/lang/String; == &org/apache/roller/weblogger/business/themes/SharedTheme.getAuthor
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getDefaultTemplate()Lorg/apache/roller/weblogger/pojos/ThemeTemplate; == &getDefaultTemplate
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getDescription()Ljava/lang/String; == &org/apache/roller/weblogger/business/themes/SharedTheme.getDescription
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getId()Ljava/lang/String; == &org/apache/roller/weblogger/business/themes/SharedTheme.getId
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getLastModified()Ljava/util/Date; == &org/apache/roller/weblogger/business/themes/SharedTheme.getLastModified
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &org/apache/roller/weblogger/business/themes/SharedTheme.getName
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getPreviewImage()Lorg/apache/roller/weblogger/pojos/ThemeResource; == &getPreviewImage
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getResource(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeResource; == &getResource
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getResources()Ljava/util/List; == &getResources
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getStylesheet()Lorg/apache/roller/weblogger/pojos/ThemeTemplate; == &getStylesheet
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByAction(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate; == &getTemplateByAction
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByLink(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate; == &getTemplateByLink
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplateByName(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/ThemeTemplate; == &getTemplateByName
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.getTemplates()Ljava/util/List; == &getTemplates
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.isEnabled()Z == &org/apache/roller/weblogger/business/themes/SharedTheme.isEnabled
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.loadTemplateFile(Ljava/io/File;)Ljava/lang/String; == &loadTemplateFile
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.loadThemeFromDisk()V == &loadThemeFromDisk
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setAuthor(Ljava/lang/String;)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setAuthor
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setDescription(Ljava/lang/String;)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setDescription
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setEnabled(Z)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setEnabled
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setId(Ljava/lang/String;)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setId
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setLastModified(Ljava/util/Date;)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setLastModified
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V == &org/apache/roller/weblogger/business/themes/SharedTheme.setName
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.setResource(Ljava/lang/String;Lorg/apache/roller/weblogger/business/themes/SharedThemeResourceFromDir;)V == &setResource
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init): init'ed(log)
    //#SharedThemeFromDir.java:47: end of method: org.apache.roller.weblogger.business.themes.SharedThemeFromDir.org.apache.roller.weblogger.business.themes.SharedThemeFromDir__static_init
    
    // the filesystem directory where we should read this theme from
    private String themeDir = null;
    
    // the theme preview image
    private ThemeResource previewImage = null;
    
    // the theme stylesheet
    private ThemeTemplate stylesheet = null;
    
    // we keep templates in a Map for faster lookups by name
    // the Map contains ... (template name, ThemeTemplate)
    private Map templatesByName = new HashMap();
    
    // we keep templates in a Map for faster lookups by link
    // the Map contains ... (template link, ThemeTemplate)
    private Map templatesByLink = new HashMap();
    
    // we keep templates in a Map for faster lookups by action
    // the Map contains ... (template action, ThemeTemplate)
    private Map templatesByAction = new HashMap();
    
    // we keep resources in a Map for faster lookups by path
    // the Map contains ... (resource path, ThemeResource)
    private Map resources = new HashMap();
    
    
    public SharedThemeFromDir(String themeDirPath) 
            throws ThemeInitializationException {
    //#SharedThemeFromDir.java:76: method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): ":"._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Couldn't load stylesheet theme ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Couldn't load theme ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Couldn't read  theme ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Couldn't read theme ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Exception reading theme ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Loading Theme "._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Parsing theme descriptor for "._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "Unable to parse theme descriptor for theme "._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "] preview image file ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "] resource file ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "] template file ["._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "]"._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): "theme.xml"._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Descendant_Table[others]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setDescription(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setEnabled(Z)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setId(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setLastModified(Ljava/util/Date;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): __Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): java.io.File.separator
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): java.io.File.separator._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): log
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadata]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.addResource(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.addTemplate(Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getPreviewImage()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getResources()Ljava/util/Set;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getStylesheet()Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getTemplates()Ljava/util/Set;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setId(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setPreviewImage(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setStylesheet(Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataParser.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadataParser]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataParser.__Dispatch_Table.unmarshall(Ljava/io/InputStream;)Lorg/apache/roller/weblogger/business/themes/ThemeMetadata;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Descendant_Table[others]
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getAction()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getContentsFile()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getDescription()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getLink()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getTemplateLanguage()Ljava/lang/String;
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.isHidden()Z
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.isNavbar()Z
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setAction(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setContentType(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setContentsFile(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setDescription(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setHidden(Z)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setLink(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setNavbar(Z)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setTemplateLanguage(Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): themeDirPath
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): themeDirPath._tainted
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this
    //#input(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.__Tag
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#18) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#8) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new File(loadThemeFromDisk#9) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#1) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#2) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#3) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#4) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12).__Tag
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12).relativePath
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12).resourceFile
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).__Tag
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).action
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).contents
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).description
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).hidden
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).id
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).lastModified
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).link
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).myTheme
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).name
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).navbar
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).outputContentType
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16).templateLanguage
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new String(loadTemplateFile#5) num objects
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.__Tag
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.author
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.description
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.enabled
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.id
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.lastModified
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.name
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.previewImage
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.resources
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.stylesheet
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByAction
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByLink
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByName
    //#output(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.themeDir
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): java.lang.StringBuilder:toString(...)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#18)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#8)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new File(loadThemeFromDisk#9)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#1)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#2)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#3)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#4)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16)
    //#new obj(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new String(loadTemplateFile#5)
    //#pre[1] (void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): log != null
    //#pre[2] (void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.__Tag == org/apache/roller/weblogger/business/themes/SharedThemeFromDir
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.__Tag == org/apache/roller/weblogger/business/themes/SharedThemeFromDir
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(this.author)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(this.description)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.enabled == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(this.id)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.lastModified == &new Date(loadThemeFromDisk#8)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(this.name)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.previewImage == One-of{null, &new SharedThemeResourceFromDir(loadThemeFromDisk#12)}
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.previewImage in Addr_Set{null,&new SharedThemeResourceFromDir(loadThemeFromDisk#12)}
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.resources == &new HashMap(SharedThemeFromDir#4)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.stylesheet == One-of{null, &new SharedThemeTemplate(loadThemeFromDisk#16)}
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.stylesheet in Addr_Set{null,&new SharedThemeTemplate(loadThemeFromDisk#16)}
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByAction == &new HashMap(SharedThemeFromDir#3)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByLink == &new HashMap(SharedThemeFromDir#2)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.templatesByName == &new HashMap(SharedThemeFromDir#1)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): this.themeDir == themeDirPath
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(this.themeDir)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#18) num objects <= 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeTemplate(loadThemeFromDisk#16) num objects == new Date(loadThemeFromDisk#18) num objects
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new Date(loadThemeFromDisk#8) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new File(loadThemeFromDisk#9) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#1) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#2) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#3) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new HashMap(SharedThemeFromDir#4) num objects == 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12) num objects <= 1
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12).__Tag == org/apache/roller/weblogger/business/themes/SharedThemeResourceFromDir
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeResourceFromDir(loadThemeFromDisk#12).relativePath)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): new SharedThemeResourceFromDir(loadThemeFromDisk#12).resourceFile == &new File(loadThemeFromDisk#9)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).__Tag)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).action)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).contents)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).description)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).hidden)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).id)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).lastModified)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).link)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).myTheme)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).name)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).navbar)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).outputContentType)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).templateLanguage)
    //#post(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): init'ed(new String(loadTemplateFile#5) num objects)
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.lang.StringUtils:replace
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getName
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getLink
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getAction
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.File:canRead
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.File:length
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.InputStreamReader:read
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.String
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:getName
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.logging.Log:isDebugEnabled
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.Element:getAttributeValue
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.Element:getChildText
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.input.SAXBuilder
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.input.SAXBuilder:build
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.Document:getRootElement
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.Element:getChild
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.jdom.Element:getChildren
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setId
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setName
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setDescription
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setAuthor
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Date
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setLastModified
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:setEnabled
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.File
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.io.File:lastModified
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.roller.weblogger.WebloggerException
    //#unanalyzed(void org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)): Effects-of-calling:org.apache.roller.RollerException
        
        this.themeDir = themeDirPath;
        
        // load the theme elements and cache 'em
        loadThemeFromDisk();
    }
    //#SharedThemeFromDir.java:82: end of method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.org.apache.roller.weblogger.business.themes.SharedThemeFromDir(String)

    
    /**
     * Get a resource representing the preview image for this theme.
     */
    public ThemeResource getPreviewImage() {
        return this.previewImage;
    //#SharedThemeFromDir.java:89: method: ThemeResource org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getPreviewImage()
    //#input(ThemeResource getPreviewImage()): this
    //#input(ThemeResource getPreviewImage()): this.previewImage
    //#output(ThemeResource getPreviewImage()): return_value
    //#pre[2] (ThemeResource getPreviewImage()): init'ed(this.previewImage)
    //#post(ThemeResource getPreviewImage()): return_value == this.previewImage
    //#post(ThemeResource getPreviewImage()): init'ed(return_value)
    //#SharedThemeFromDir.java:89: end of method: ThemeResource org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getPreviewImage()
    }
    
    
    /**
     * Get the collection of all templates associated with this Theme.
     */
    public List getTemplates() {
        return new ArrayList(this.templatesByName.values());
    //#SharedThemeFromDir.java:97: method: List org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplates()
    //#input(List getTemplates()): this
    //#input(List getTemplates()): this.templatesByName
    //#output(List getTemplates()): new ArrayList(getTemplates#1) num objects
    //#output(List getTemplates()): return_value
    //#new obj(List getTemplates()): new ArrayList(getTemplates#1)
    //#pre[2] (List getTemplates()): this.templatesByName != null
    //#post(List getTemplates()): return_value == &new ArrayList(getTemplates#1)
    //#post(List getTemplates()): new ArrayList(getTemplates#1) num objects == 1
    //#SharedThemeFromDir.java:97: end of method: List org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplates()
    }
    
    
    /**
     * Lookup the stylesheet.
     * Returns null if no stylesheet defined.
     */
    public ThemeTemplate getStylesheet() {
        return this.stylesheet;
    //#SharedThemeFromDir.java:106: method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getStylesheet()
    //#input(ThemeTemplate getStylesheet()): this
    //#input(ThemeTemplate getStylesheet()): this.stylesheet
    //#output(ThemeTemplate getStylesheet()): return_value
    //#pre[2] (ThemeTemplate getStylesheet()): init'ed(this.stylesheet)
    //#post(ThemeTemplate getStylesheet()): return_value == this.stylesheet
    //#post(ThemeTemplate getStylesheet()): init'ed(return_value)
    //#SharedThemeFromDir.java:106: end of method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getStylesheet()
    }
    
    
    /**
     * Looup the default template, action = weblog.
     * Returns null if the template cannot be found.
     */
    public ThemeTemplate getDefaultTemplate() {
        return (ThemeTemplate) this.templatesByAction.get(ThemeTemplate.ACTION_WEBLOG);
    //#SharedThemeFromDir.java:115: method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getDefaultTemplate()
    //#input(ThemeTemplate getDefaultTemplate()): this
    //#input(ThemeTemplate getDefaultTemplate()): this.templatesByAction
    //#output(ThemeTemplate getDefaultTemplate()): return_value
    //#pre[2] (ThemeTemplate getDefaultTemplate()): this.templatesByAction != null
    //#post(ThemeTemplate getDefaultTemplate()): init'ed(return_value)
    //#SharedThemeFromDir.java:115: end of method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getDefaultTemplate()
    }
    
    
    /**
     * Lookup the specified template by name.
     * Returns null if the template cannot be found.
     */
    public ThemeTemplate getTemplateByName(String name) {
        return (ThemeTemplate) this.templatesByName.get(name);
    //#SharedThemeFromDir.java:124: method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByName(String)
    //#input(ThemeTemplate getTemplateByName(String)): name
    //#input(ThemeTemplate getTemplateByName(String)): this
    //#input(ThemeTemplate getTemplateByName(String)): this.templatesByName
    //#output(ThemeTemplate getTemplateByName(String)): return_value
    //#pre[3] (ThemeTemplate getTemplateByName(String)): this.templatesByName != null
    //#post(ThemeTemplate getTemplateByName(String)): init'ed(return_value)
    //#SharedThemeFromDir.java:124: end of method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByName(String)
    }
    
    
    /**
     * Lookup the specified template by link.
     * Returns null if the template cannot be found.
     */
    public ThemeTemplate getTemplateByLink(String link) {
        return (ThemeTemplate) this.templatesByLink.get(link);
    //#SharedThemeFromDir.java:133: method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByLink(String)
    //#input(ThemeTemplate getTemplateByLink(String)): link
    //#input(ThemeTemplate getTemplateByLink(String)): this
    //#input(ThemeTemplate getTemplateByLink(String)): this.templatesByLink
    //#output(ThemeTemplate getTemplateByLink(String)): return_value
    //#pre[3] (ThemeTemplate getTemplateByLink(String)): this.templatesByLink != null
    //#post(ThemeTemplate getTemplateByLink(String)): init'ed(return_value)
    //#SharedThemeFromDir.java:133: end of method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByLink(String)
    }
    
    
    /**
     * Lookup the specified template by action.
     * Returns null if the template cannot be found.
     */
    public ThemeTemplate getTemplateByAction(String action) {
        return (ThemeTemplate) this.templatesByAction.get(action);
    //#SharedThemeFromDir.java:142: method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByAction(String)
    //#input(ThemeTemplate getTemplateByAction(String)): action
    //#input(ThemeTemplate getTemplateByAction(String)): this
    //#input(ThemeTemplate getTemplateByAction(String)): this.templatesByAction
    //#output(ThemeTemplate getTemplateByAction(String)): return_value
    //#pre[3] (ThemeTemplate getTemplateByAction(String)): this.templatesByAction != null
    //#post(ThemeTemplate getTemplateByAction(String)): init'ed(return_value)
    //#SharedThemeFromDir.java:142: end of method: ThemeTemplate org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getTemplateByAction(String)
    }
    
    
    /**
     * Get the collection of all resources associated with this Theme.
     *
     * It is assured that the resources are returned sorted by pathname.
     */
    public List getResources() {
        
        // make sure resources are sorted.
        List myResources = new ArrayList(this.resources.values());
    //#SharedThemeFromDir.java:154: method: List org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getResources()
    //#input(List getResources()): this
    //#input(List getResources()): this.resources
    //#output(List getResources()): new ArrayList(getResources#1) num objects
    //#output(List getResources()): return_value
    //#new obj(List getResources()): new ArrayList(getResources#1)
    //#pre[2] (List getResources()): this.resources != null
    //#post(List getResources()): return_value == &new ArrayList(getResources#1)
    //#post(List getResources()): new ArrayList(getResources#1) num objects == 1
        Collections.sort(myResources);
        
        return myResources;
    //#SharedThemeFromDir.java:157: end of method: List org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getResources()
    }
    
    
    /**
     * Lookup the specified resource by path.
     * Returns null if the resource cannot be found.
     */
    public ThemeResource getResource(String path) {
        return (ThemeResource) this.resources.get(path);
    //#SharedThemeFromDir.java:166: method: ThemeResource org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getResource(String)
    //#input(ThemeResource getResource(String)): path
    //#input(ThemeResource getResource(String)): this
    //#input(ThemeResource getResource(String)): this.resources
    //#output(ThemeResource getResource(String)): return_value
    //#pre[3] (ThemeResource getResource(String)): this.resources != null
    //#post(ThemeResource getResource(String)): init'ed(return_value)
    //#SharedThemeFromDir.java:166: end of method: ThemeResource org.apache.roller.weblogger.business.themes.SharedThemeFromDir.getResource(String)
    }
    
    
    public String toString() {
        StringBuffer sb = new StringBuffer();
    //#SharedThemeFromDir.java:171: method: String org.apache.roller.weblogger.business.themes.SharedThemeFromDir.toString()
    //#input(String toString()): "&#10;"._tainted
    //#input(String toString()): this
    //#input(String toString()): this.name
    //#input(String toString()): this.name._tainted
    //#input(String toString()): this.templatesByName
    //#output(String toString()): java.lang.StringBuffer:toString(...)._tainted
    //#output(String toString()): return_value
    //#new obj(String toString()): java.lang.StringBuffer:toString(...)
    //#pre[2] (String toString()): init'ed(this.name)
    //#pre[4] (String toString()): this.templatesByName != null
    //#presumption(String toString()): java.util.Map:values(...)@175 != null
    //#post(String toString()): init'ed(java.lang.StringBuffer:toString(...)._tainted)
    //#post(String toString()): return_value == &java.lang.StringBuffer:toString(...)
    //#test_vector(String toString()): java.util.Iterator:hasNext(...)@176: {0}, {1}
        sb.append(name);
        sb.append("\n");
        
        Iterator it = this.templatesByName.values().iterator();
        while(it.hasNext()) {
            sb.append(it.next());
            sb.append("\n");
        }
        
        return sb.toString();
    //#SharedThemeFromDir.java:181: end of method: String org.apache.roller.weblogger.business.themes.SharedThemeFromDir.toString()
        
    }
    
    
    /**
     * Load all the elements of this theme from disk and cache them.
     */
    private void loadThemeFromDisk() throws ThemeInitializationException {
        
        log.debug("Parsing theme descriptor for "+this.themeDir);
    //#SharedThemeFromDir.java:191: method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.loadThemeFromDisk()
    //#SharedThemeFromDir.java:191: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
    //#input(void loadThemeFromDisk()): ":"._tainted
    //#input(void loadThemeFromDisk()): "Couldn't load stylesheet theme ["._tainted
    //#input(void loadThemeFromDisk()): "Couldn't load theme ["._tainted
    //#input(void loadThemeFromDisk()): "Couldn't read  theme ["._tainted
    //#input(void loadThemeFromDisk()): "Couldn't read theme ["._tainted
    //#input(void loadThemeFromDisk()): "Exception reading theme ["._tainted
    //#input(void loadThemeFromDisk()): "Loading Theme "._tainted
    //#input(void loadThemeFromDisk()): "Parsing theme descriptor for "._tainted
    //#input(void loadThemeFromDisk()): "Unable to parse theme descriptor for theme "._tainted
    //#input(void loadThemeFromDisk()): "] preview image file ["._tainted
    //#input(void loadThemeFromDisk()): "] resource file ["._tainted
    //#input(void loadThemeFromDisk()): "] template file ["._tainted
    //#input(void loadThemeFromDisk()): "]"._tainted
    //#input(void loadThemeFromDisk()): "theme.xml"._tainted
    //#input(void loadThemeFromDisk()): __Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir]
    //#input(void loadThemeFromDisk()): __Descendant_Table[others]
    //#input(void loadThemeFromDisk()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setDescription(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setEnabled(Z)V
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setId(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setLastModified(Ljava/util/Date;)V
    //#input(void loadThemeFromDisk()): __Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): java.io.File.separator
    //#input(void loadThemeFromDisk()): java.io.File.separator._tainted
    //#input(void loadThemeFromDisk()): log
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadata]
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.addResource(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.addTemplate(Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getPreviewImage()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getResources()Ljava/util/Set;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getStylesheet()Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.getTemplates()Ljava/util/Set;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setAuthor(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setId(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setPreviewImage(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadata.__Dispatch_Table.setStylesheet(Lorg/apache/roller/weblogger/business/themes/ThemeMetadataTemplate;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataParser.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadataParser]
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataParser.__Dispatch_Table.unmarshall(Ljava/io/InputStream;)Lorg/apache/roller/weblogger/business/themes/ThemeMetadata;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Descendant_Table[org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate]
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Descendant_Table[others]
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getAction()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getContentsFile()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getDescription()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getLink()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.getTemplateLanguage()Ljava/lang/String;
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.isHidden()Z
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.isNavbar()Z
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setAction(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setContentType(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setContentsFile(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setDescription(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setHidden(Z)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setLink(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setNavbar(Z)V
    //#input(void loadThemeFromDisk()): org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate.__Dispatch_Table.setTemplateLanguage(Ljava/lang/String;)V
    //#input(void loadThemeFromDisk()): this
    //#input(void loadThemeFromDisk()): this.__Tag
    //#input(void loadThemeFromDisk()): this.name._tainted
    //#input(void loadThemeFromDisk()): this.resources
    //#input(void loadThemeFromDisk()): this.templatesByAction
    //#input(void loadThemeFromDisk()): this.templatesByLink
    //#input(void loadThemeFromDisk()): this.templatesByName
    //#input(void loadThemeFromDisk()): this.themeDir
    //#input(void loadThemeFromDisk()): this.themeDir._tainted
    //#output(void loadThemeFromDisk()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void loadThemeFromDisk()): new Date(loadThemeFromDisk#18) num objects
    //#output(void loadThemeFromDisk()): new Date(loadThemeFromDisk#8) num objects
    //#output(void loadThemeFromDisk()): new File(loadThemeFromDisk#9) num objects
    //#output(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12) num objects
    //#output(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12).__Tag
    //#output(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12).relativePath
    //#output(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12).resourceFile
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16) num objects
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).__Tag
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).action
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).contents
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).description
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).hidden
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).id
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).lastModified
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).link
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).myTheme
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).name
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).navbar
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).outputContentType
    //#output(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16).templateLanguage
    //#output(void loadThemeFromDisk()): new String(loadTemplateFile#5) num objects
    //#output(void loadThemeFromDisk()): this.author
    //#output(void loadThemeFromDisk()): this.description
    //#output(void loadThemeFromDisk()): this.enabled
    //#output(void loadThemeFromDisk()): this.id
    //#output(void loadThemeFromDisk()): this.lastModified
    //#output(void loadThemeFromDisk()): this.name
    //#output(void loadThemeFromDisk()): this.previewImage
    //#output(void loadThemeFromDisk()): this.stylesheet
    //#new obj(void loadThemeFromDisk()): java.lang.StringBuilder:toString(...)
    //#new obj(void loadThemeFromDisk()): new Date(loadThemeFromDisk#18)
    //#new obj(void loadThemeFromDisk()): new Date(loadThemeFromDisk#8)
    //#new obj(void loadThemeFromDisk()): new File(loadThemeFromDisk#9)
    //#new obj(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12)
    //#new obj(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16)
    //#new obj(void loadThemeFromDisk()): new String(loadTemplateFile#5)
    //#pre[1] (void loadThemeFromDisk()): log != null
    //#pre[5] (void loadThemeFromDisk()): this.__Tag == org/apache/roller/weblogger/business/themes/SharedThemeFromDir
    //#pre[10] (void loadThemeFromDisk()): init'ed(this.themeDir)
    //#pre[6] (void loadThemeFromDisk()): (soft) this.resources != null
    //#pre[7] (void loadThemeFromDisk()): (soft) this.templatesByAction != null
    //#pre[8] (void loadThemeFromDisk()): (soft) this.templatesByLink != null
    //#pre[9] (void loadThemeFromDisk()): (soft) this.templatesByName != null
    //#presumption(void loadThemeFromDisk()): init'ed(java.io.File.separator)
    //#presumption(void loadThemeFromDisk()): java.util.Iterator:next(...).__Tag@283 == org/apache/roller/weblogger/business/themes/ThemeMetadataTemplate
    //#presumption(void loadThemeFromDisk()): java.util.Iterator:next(...)@283 != null
    //#post(void loadThemeFromDisk()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void loadThemeFromDisk()): init'ed(this.author)
    //#post(void loadThemeFromDisk()): init'ed(this.description)
    //#post(void loadThemeFromDisk()): this.enabled == 1
    //#post(void loadThemeFromDisk()): init'ed(this.id)
    //#post(void loadThemeFromDisk()): this.lastModified == &new Date(loadThemeFromDisk#8)
    //#post(void loadThemeFromDisk()): init'ed(this.name)
    //#post(void loadThemeFromDisk()): this.previewImage == One-of{old this.previewImage, &new SharedThemeResourceFromDir(loadThemeFromDisk#12)}
    //#post(void loadThemeFromDisk()): this.stylesheet == One-of{old this.stylesheet, &new SharedThemeTemplate(loadThemeFromDisk#16)}
    //#post(void loadThemeFromDisk()): new Date(loadThemeFromDisk#18) num objects <= 1
    //#post(void loadThemeFromDisk()): new Date(loadThemeFromDisk#8) num objects == 1
    //#post(void loadThemeFromDisk()): new File(loadThemeFromDisk#9) num objects == 1
    //#post(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12) num objects <= 1
    //#post(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12).__Tag == org/apache/roller/weblogger/business/themes/SharedThemeResourceFromDir
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeResourceFromDir(loadThemeFromDisk#12).relativePath)
    //#post(void loadThemeFromDisk()): new SharedThemeResourceFromDir(loadThemeFromDisk#12).resourceFile == &new File(loadThemeFromDisk#9)
    //#post(void loadThemeFromDisk()): new SharedThemeTemplate(loadThemeFromDisk#16) num objects <= 1
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).__Tag)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).action)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).contents)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).description)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).hidden)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).id)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).lastModified)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).link)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).myTheme)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).name)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).navbar)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).outputContentType)
    //#post(void loadThemeFromDisk()): init'ed(new SharedThemeTemplate(loadThemeFromDisk#16).templateLanguage)
    //#post(void loadThemeFromDisk()): init'ed(new String(loadTemplateFile#5) num objects)
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.commons.lang.StringUtils:replace
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getName
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getLink
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.roller.weblogger.pojos.ThemeTemplate:getAction
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.File:canRead
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.File:length
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.io.InputStreamReader:read
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.String
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:getName
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.commons.logging.Log:isDebugEnabled
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.Element:getAttributeValue
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.Element:getChildText
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.input.SAXBuilder
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.input.SAXBuilder:build
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.Document:getRootElement
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.Element:getChild
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.jdom.Element:getChildren
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:java.util.Set:add
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.roller.weblogger.WebloggerException
    //#unanalyzed(void loadThemeFromDisk()): Effects-of-calling:org.apache.roller.RollerException
    //#test_vector(void loadThemeFromDisk()): java.io.File:canRead(...)@215: {1}, {0}
    //#test_vector(void loadThemeFromDisk()): java.io.File:canRead(...)@269: {1}, {0}
    //#test_vector(void loadThemeFromDisk()): java.io.File:exists(...)@215: {0}, {1}
    //#test_vector(void loadThemeFromDisk()): java.io.File:exists(...)@269: {0}, {1}
    //#test_vector(void loadThemeFromDisk()): java.util.Iterator:hasNext(...)@262: {0}, {1}
    //#test_vector(void loadThemeFromDisk()): java.util.Iterator:hasNext(...)@282: {0}, {1}
        
        ThemeMetadata themeMetadata = null;
    //#SharedThemeFromDir.java:193: Warning: unused assignment
    //#    unused assignment into themeMetadata
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    Attribs:  Uncertain
        try {
            // lookup theme descriptor and parse it
            ThemeMetadataParser parser = new ThemeMetadataParser();
            InputStream is = new FileInputStream(this.themeDir + File.separator + "theme.xml");
            themeMetadata = parser.unmarshall(is);
        } catch (Exception ex) {
            throw new ThemeInitializationException("Unable to parse theme descriptor for theme "+this.themeDir, ex);
        }
        
        log.debug("Loading Theme "+themeMetadata.getName());
    //#SharedThemeFromDir.java:203: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        // use parsed theme descriptor to load Theme data
        setId(themeMetadata.getId());
        setName(themeMetadata.getName());
        setDescription(themeMetadata.getName());
        setAuthor(themeMetadata.getAuthor());
        setLastModified(new Date());
        setEnabled(true);
        
        // load resource representing preview image
        File previewFile = new File(this.themeDir + File.separator + themeMetadata.getPreviewImage());
        if(!previewFile.exists() || !previewFile.canRead()) {
            log.warn("Couldn't read theme [" + this.getName() + "] preview image file ["+themeMetadata.getPreviewImage()+"]");
    //#SharedThemeFromDir.java:216: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
        } else {
            this.previewImage = new SharedThemeResourceFromDir(themeMetadata.getPreviewImage(), previewFile);
        }
        
        // load stylesheet if possible
        if(themeMetadata.getStylesheet() != null) {
            
            ThemeMetadataTemplate stylesheetTmpl = themeMetadata.getStylesheet();
            
            // construct File object from path
            File templateFile = new File(this.themeDir + File.separator + 
                    stylesheetTmpl.getContentsFile());
            
            // read stylesheet contents
            String contents = loadTemplateFile(templateFile);
            if(contents == null) {
                // if we don't have any contents then skip this one
                log.error("Couldn't load stylesheet theme [" + this.getName() + "] template file ["+templateFile+"]");
    //#SharedThemeFromDir.java:234: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
            } else {
                
                // construct ThemeTemplate representing this file
                SharedThemeTemplate theme_template = new SharedThemeTemplate(
                        this,
                        themeMetadata.getId()+":"+stylesheetTmpl.getName(),
                        WeblogTemplate.ACTION_CUSTOM,
                        stylesheetTmpl.getName(),
                        stylesheetTmpl.getDescription(),
                        contents,
                        stylesheetTmpl.getLink(),
                        new Date(templateFile.lastModified()),
                        stylesheetTmpl.getTemplateLanguage(),
                        false,
                        false);
                
                // store it
                this.stylesheet = theme_template;
                
                // add it to templates list
                addTemplate(theme_template);
            }
        }
        
        // go through static resources and add them to the theme
        String resourcePath = null;
    //#SharedThemeFromDir.java:260: Warning: unused assignment
    //#    unused assignment into resourcePath
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    Attribs:  Uncertain
        Iterator resourcesIter = themeMetadata.getResources().iterator();
        while (resourcesIter.hasNext()) {
            resourcePath = (String) resourcesIter.next();
            
            // construct ThemeResource object from resource
            File resourceFile = new File(this.themeDir + File.separator + resourcePath);
            
            // Continue reading theme even if problem encountered with one file
            if(!resourceFile.exists() || !resourceFile.canRead()) {
                log.warn("Couldn't read  theme [" + this.getName() + "] resource file ["+resourcePath+"]");
    //#SharedThemeFromDir.java:270: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
                continue;
            }
            
            // add it to the theme
            setResource(resourcePath, new SharedThemeResourceFromDir(resourcePath, resourceFile));
        }
        
        // go through templates and read in contents to a ThemeTemplate
        ThemeTemplate theme_template = null;
    //#SharedThemeFromDir.java:279: Warning: unused assignment
    //#    unused assignment into theme_template
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    Attribs:  Uncertain
        ThemeMetadataTemplate templateMetadata = null;
    //#SharedThemeFromDir.java:280: Warning: unused assignment
    //#    unused assignment into templateMetadata
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    Attribs:  Uncertain
        Iterator templatesIter = themeMetadata.getTemplates().iterator();
        while (templatesIter.hasNext()) {
            templateMetadata = (ThemeMetadataTemplate) templatesIter.next();
            
            // construct File object from path
            File templateFile = new File(this.themeDir + File.separator + 
                    templateMetadata.getContentsFile());
            
            String contents = loadTemplateFile(templateFile);
            if(contents == null) {
                // if we don't have any contents then skip this one
                throw new ThemeInitializationException("Couldn't load theme [" + this.getName() + "] template file ["+templateFile+"]");
    //#SharedThemeFromDir.java:292: ?conditional throw
    //#    contents != null
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void loadThemeFromDisk()
    //#    basic block: bb_24
    //#    assertion: contents != null
    //#    VN: loadTemplateFile(...) == null
    //#    Expected: {0}
    //#    Bad: {1}
    //#    Attribs:  Int  Exp in +/-1000  Exp singleton  Bad singleton  Bad overlaps +/-1000  Bad > Exp
            }
            
            // construct ThemeTemplate representing this file
            theme_template = new SharedThemeTemplate(
                    this,
                    themeMetadata.getId()+":"+templateMetadata.getName(),
                    templateMetadata.getAction(),
                    templateMetadata.getName(),
                    templateMetadata.getDescription(),
                    contents,
                    templateMetadata.getLink(),
                    new Date(templateFile.lastModified()),
                    templateMetadata.getTemplateLanguage(),
                    templateMetadata.isHidden(),
                    templateMetadata.isNavbar());

            // add it to the theme
            addTemplate(theme_template);
        }
    }
    //#SharedThemeFromDir.java:312: end of method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.loadThemeFromDisk()
    
    
    /**
     * Load a single template file as a string, returns null if can't read file.
     */
    private String loadTemplateFile(File templateFile) {
        // Continue reading theme even if problem encountered with one file
        if(!templateFile.exists() && !templateFile.canRead()) {
    //#SharedThemeFromDir.java:320: method: String org.apache.roller.weblogger.business.themes.SharedThemeFromDir.loadTemplateFile(File)
    //#input(String loadTemplateFile(File)): "Exception reading theme ["._tainted
    //#input(String loadTemplateFile(File)): "] template file ["._tainted
    //#input(String loadTemplateFile(File)): "]"._tainted
    //#input(String loadTemplateFile(File)): __Descendant_Table[org/apache/roller/weblogger/business/themes/SharedThemeFromDir]
    //#input(String loadTemplateFile(File)): __Descendant_Table[others]
    //#input(String loadTemplateFile(File)): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(String loadTemplateFile(File)): log
    //#input(String loadTemplateFile(File)): templateFile
    //#input(String loadTemplateFile(File)): templateFile._tainted
    //#input(String loadTemplateFile(File)): this
    //#input(String loadTemplateFile(File)): this.__Tag
    //#input(String loadTemplateFile(File)): this.name
    //#input(String loadTemplateFile(File)): this.name._tainted
    //#output(String loadTemplateFile(File)): new String(loadTemplateFile#5) num objects
    //#output(String loadTemplateFile(File)): return_value
    //#new obj(String loadTemplateFile(File)): new String(loadTemplateFile#5)
    //#pre[2] (String loadTemplateFile(File)): templateFile != null
    //#pre[1] (String loadTemplateFile(File)): (soft) log != null
    //#pre[6] (String loadTemplateFile(File)): (soft) this.__Tag == org/apache/roller/weblogger/business/themes/SharedThemeFromDir
    //#pre[7] (String loadTemplateFile(File)): (soft) init'ed(this.name)
    //#presumption(String loadTemplateFile(File)): java.io.File:length(...)@327 >= 0
    //#post(String loadTemplateFile(File)): return_value in Addr_Set{null,&new String(loadTemplateFile#5)}
    //#post(String loadTemplateFile(File)): new String(loadTemplateFile#5) num objects <= 1
    //#test_vector(String loadTemplateFile(File)): java.io.File:canRead(...)@320: {1}, {0}
    //#test_vector(String loadTemplateFile(File)): java.io.File:exists(...)@320: {1}, {0}
            return null;
        }
        
        char[] chars = null;
    //#SharedThemeFromDir.java:324: Warning: unused assignment
    //#    unused assignment into chars
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: String loadTemplateFile(File)
    //#    Attribs:  Uncertain
        int length;
        try {
            chars = new char[(int) templateFile.length()];
            FileInputStream stream = new FileInputStream(templateFile);
            InputStreamReader reader = new InputStreamReader(stream, "UTF-8");
            length = reader.read(chars);
        } catch (Exception noprob) {
            log.error("Exception reading theme [" + this.getName() + "] template file ["+templateFile+"]");
    //#SharedThemeFromDir.java:332: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: String loadTemplateFile(File)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
            if (log.isDebugEnabled())
    //#SharedThemeFromDir.java:333: Warning: method not available
    //#    -- call on bool org.apache.commons.logging.Log:isDebugEnabled()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: String loadTemplateFile(File)
    //#    unanalyzed callee: bool org.apache.commons.logging.Log:isDebugEnabled()
                log.debug(noprob);
    //#SharedThemeFromDir.java:334: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: String loadTemplateFile(File)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            return null;
        }
        
        return new String(chars, 0, length);
    //#SharedThemeFromDir.java:338: end of method: String org.apache.roller.weblogger.business.themes.SharedThemeFromDir.loadTemplateFile(File)
    }
    
    
    /**
     * Set the value for a given template name.
     */
    private void addTemplate(ThemeTemplate template) {
        this.templatesByName.put(template.getName(), template);
    //#SharedThemeFromDir.java:346: method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.addTemplate(ThemeTemplate)
    //#SharedThemeFromDir.java:346: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.ThemeTemplate:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void addTemplate(ThemeTemplate)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.ThemeTemplate:getName()
    //#input(void addTemplate(ThemeTemplate)): template
    //#input(void addTemplate(ThemeTemplate)): this
    //#input(void addTemplate(ThemeTemplate)): this.templatesByAction
    //#input(void addTemplate(ThemeTemplate)): this.templatesByLink
    //#input(void addTemplate(ThemeTemplate)): this.templatesByName
    //#pre[1] (void addTemplate(ThemeTemplate)): template != null
    //#pre[4] (void addTemplate(ThemeTemplate)): this.templatesByLink != null
    //#pre[5] (void addTemplate(ThemeTemplate)): this.templatesByName != null
    //#pre[3] (void addTemplate(ThemeTemplate)): (soft) this.templatesByAction != null
    //#test_vector(void addTemplate(ThemeTemplate)): java.lang.String:equals(...)@348: {1}, {0}
        this.templatesByLink.put(template.getLink(), template);
    //#SharedThemeFromDir.java:347: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.ThemeTemplate:getLink()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void addTemplate(ThemeTemplate)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.ThemeTemplate:getLink()
        if(!ThemeTemplate.ACTION_CUSTOM.equals(template.getAction())) {
    //#SharedThemeFromDir.java:348: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.ThemeTemplate:getAction()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void addTemplate(ThemeTemplate)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.ThemeTemplate:getAction()
            this.templatesByAction.put(template.getAction(), template);
    //#SharedThemeFromDir.java:349: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.ThemeTemplate:getAction()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void addTemplate(ThemeTemplate)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.ThemeTemplate:getAction()
        }
    }
    //#SharedThemeFromDir.java:351: end of method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.addTemplate(ThemeTemplate)
    
    
    /**
     * Set the value for a given resource path.
     */
    private void setResource(String path, SharedThemeResourceFromDir resource) {
        // normalize to use web-style separators
        String normalizedPath = StringUtils.replace(path, "\\", "/");
    //#SharedThemeFromDir.java:359: method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.setResource(String, SharedThemeResourceFromDir)
    //#SharedThemeFromDir.java:359: Warning: method not available
    //#    -- call on String org.apache.commons.lang.StringUtils:replace(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
    //#    method: void setResource(String, SharedThemeResourceFromDir)
    //#    unanalyzed callee: String org.apache.commons.lang.StringUtils:replace(String, String, String)
    //#input(void setResource(String, SharedThemeResourceFromDir)): path
    //#input(void setResource(String, SharedThemeResourceFromDir)): resource
    //#input(void setResource(String, SharedThemeResourceFromDir)): this
    //#input(void setResource(String, SharedThemeResourceFromDir)): this.resources
    //#pre[4] (void setResource(String, SharedThemeResourceFromDir)): this.resources != null
        this.resources.put(normalizedPath, resource);
    }
    //#SharedThemeFromDir.java:361: end of method: void org.apache.roller.weblogger.business.themes.SharedThemeFromDir.setResource(String, SharedThemeResourceFromDir)
    
}
    //#SharedThemeFromDir.java:: end of class: org.apache.roller.weblogger.business.themes.SharedThemeFromDir
