/*
* Copyright (c) 1998-2011 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Scott Ferguson
*/
package com.caucho.jsp.cfg;
import com.caucho.config.DependencyBean;
import com.caucho.server.webapp.WebApp;
import com.caucho.vfs.Path;
import com.caucho.vfs.PersistentDependency;
import java.util.ArrayList;
/**
* Configuration for the taglib in the .tld
*/
public class TldTaglib implements DependencyBean
{
private String _tlibVersion;
private String _jspVersion;
private String _shortName;
private String _uri;
private String _displayName;
private String _smallIcon;
private String _largeIcon;
private String _description;
private String _info;
private TldValidator _validator;
private ArrayList<TldListener> _listeners = new ArrayList<TldListener>();
private ArrayList<TldTag> _tags = new ArrayList<TldTag>();
private ArrayList<TldTagFile> _tagFiles = new ArrayList<TldTagFile>();
private ArrayList<TldFunction> _functionList = new ArrayList<TldFunction>();
private Path _jarPath;
private Throwable _configException;
private ArrayList<PersistentDependency> _dependList
= new ArrayList<PersistentDependency>();
private boolean _isInit;
public TldTaglib()
{
}
/**
* Adds a dependency.
*/
public void addDependency(PersistentDependency depend)
{
_dependList.add(depend);
}
/**
* Sets the tld version.
*/
public void setVersion(String version)
{
_jspVersion = version;
}
/**
* Sets the schema location.
*/
public void setSchemaLocation(String location)
{
}
/**
* Sets the icon.
*/
public void setIcon(com.caucho.config.types.Icon icon)
{
}
/**
* Sets the taglib version.
*/
public void setTlibVersion(String tlibVersion)
{
_tlibVersion = tlibVersion;
}
/**
* Sets the taglib version (backwards compat).
*/
public void setTlibversion(String tlibVersion)
{
setTlibVersion(tlibVersion);
}
/**
* Gets the taglib version.
*/
public String getTlibVersion()
{
return _tlibVersion;
}
/**
* Sets the JSP version.
*/
public void setJspVersion(String jspVersion)
{
_jspVersion = jspVersion;
}
/**
* Sets the JSP version (backwards compat).
*/
public void setJspversion(String jspVersion)
{
setJspVersion(jspVersion);
}
/**
* Gets the jsp version.
*/
public String getJspVersion()
{
return _jspVersion;
}
/**
* Sets the info string
*/
public void setInfo(String info)
{
_info = info;
}
/**
* Gets the info string.
*/
public String getInfo()
{
return _info;
}
/**
* Sets the short name (prefix)
*/
public void setShortName(String shortName)
{
_shortName = shortName;
}
/**
* Sets the short name (backwards compat)
*/
public void setShortname(String shortName)
{
setShortName(shortName);
}
/**
* Gets the short name (prefix)
*/
public String getShortName()
{
return _shortName;
}
/**
* Sets the uri
*/
public void setURI(String uri)
{
_uri = uri;
}
/**
* Gets the uri
*/
public String getURI()
{
return _uri;
}
/**
* Sets the display-name
*/
public void setDisplayName(String displayName)
{
_displayName = displayName;
}
/**
* Gets the display-name
*/
public String getDisplayName()
{
return _displayName;
}
/**
* Sets the small-icon
*/
public void setSmallIcon(String smallIcon)
{
_smallIcon = smallIcon;
}
/**
* Gets the small-icon
*/
public String getSmallIcon()
{
return _smallIcon;
}
/**
* Sets the large-icon
*/
public void setLargeIcon(String largeIcon)
{
_largeIcon = largeIcon;
}
/**
* Gets the large-icon
*/
public String getLargeIcon()
{
return _largeIcon;
}
/**
* Sets the description
*/
public void setDescription(String description)
{
_description = description;
}
/**
* Gets the description
*/
public String getDescription()
{
return _description;
}
/**
* Sets the validator
*/
public void setValidator(TldValidator validator)
{
_validator = validator;
}
/**
* Gets the validator
*/
public TldValidator getValidator()
{
return _validator;
}
/**
* Adds a listener
*/
public void addListener(TldListener listener)
{
_listeners.add(listener);
}
/**
* Creates a new tag instance
*/
public TldTag createTag()
{
return new TldTag(this);
}
/**
* Adds a tag
*/
public void addTag(TldTag tag)
{
_tags.add(tag);
}
/**
* Returns the list of tags.
*/
public ArrayList<TldTag> getTagList()
{
return _tags;
}
/**
* Adds a tag-file
*/
public void addTagFile(TldTagFile tagFile)
{
_tagFiles.add(tagFile);
}
/**
* Returns the list of tag files.
*/
public ArrayList<TldTagFile> getTagFileList()
{
return _tagFiles;
}
/**
* Adds a jsf tag.
*/
public void addJsfTag(JsfTag tag)
{
_tags.add(tag);
}
/**
* Adds a function
*/
public void addFunction(TldFunction function)
{
_functionList.add(function);
}
/**
* Returns the list of functions.
*/
public ArrayList<TldFunction> getFunctionList()
{
return _functionList;
}
/**
* Sets the jar path.
*/
public void setJarPath(Path path)
{
_jarPath = path;
}
/**
* Gets the jar path.
*/
public Path getJarPath()
{
return _jarPath;
}
/**
* Sets any configuration exception
*/
public void setConfigException(Throwable e)
{
_configException = e;
}
/**
* Gets any configuration exception
*/
public Throwable getConfigException()
{
return _configException;
}
/**
* Applies the listeners.
*/
public void initListeners(WebApp app)
throws InstantiationException, IllegalAccessException
{
if (app == null)
return;
for (int i = 0; i < _listeners.size(); i++) {
TldListener listener = _listeners.get(i);
listener.register(app);
}
}
public void mergeJsf(TldTaglib jsfTaglib)
{
ArrayList<TldTag> jsfTags = jsfTaglib.getTagList();
for (int i = 0; i < jsfTags.size(); i++) {
JsfTag jsfTag = (JsfTag) jsfTags.get(i);
if (jsfTag.getBaseTag() != null)
continue;
int p = _tags.indexOf(jsfTag);
if (p >= 0) {
TldTag tag = _tags.remove(p);
jsfTag.setBaseTag(tag);
}
else
throw new IllegalStateException("No matching tag for : " + jsfTag);
_tags.add(jsfTag);
}
}
/**
* Checks for modification.
*/
public boolean isModified()
{
for (int i = 0; i < _dependList.size(); i++) {
if (_dependList.get(i).isModified())
return true;
}
return false;
}
}