/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at .
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox ,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.menus;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.*;
import org.w3c.dom.*;
import com.silverwrist.util.*;
import com.silverwrist.venice.except.ConfigException;
import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.config.RootConfig;
import com.silverwrist.venice.ui.helpers.HTMLRendering;
import com.silverwrist.venice.util.XMLLoader;
class LinkItem implements MenuComponent
{
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static Category logger = Category.getInstance(LinkItem.class);
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private String href; // what we actually link to
private int type; // the type of item we specify
private boolean enabled = true; // is this item enabled?
private String target = null; // target window for the link
private String title = null; // title (tooltip) for the link
private String on_click = null; // onClick JavaScript for the link
private String ifdef_sym = null; // include only if defined
private String ifndef_sym = null; // include only if NOT defined
private int indent = 0; // how many spaces do we indent this link?
private MenuComponent contents; // what does this link contain? (image vs. text)
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
LinkItem(Element elt, RootConfig rconf) throws ConfigException
{
XMLLoader loader = XMLLoader.get();
loader.configVerifyNodeName(elt,"link");
href = loader.configGetAttribute(elt,"href");
DOMElementHelper h = new DOMElementHelper(elt);
if (h.hasAttribute("type"))
{ // convert link type to an index
type = rconf.convertLinkType(elt.getAttribute("type"));
if (type<0) // the type is not valid
throw new ConfigException("invalid type= attribute of ");
} // end if
else // default to "absolute"
type = LinkTypes.ABSOLUTE;
// load the "target"
if (h.hasAttribute("target"))
target = elt.getAttribute("target");
// load the "title"
if (h.hasAttribute("title"))
title = elt.getAttribute("title");
// load the "onClick" script code
if (h.hasAttribute("onClick"))
on_click = elt.getAttribute("onClick");
// load the "ifdef" and "ifndef" symbols
if (h.hasAttribute("ifdef"))
ifdef_sym = elt.getAttribute("ifdef");
if (h.hasAttribute("ifndef"))
ifndef_sym = elt.getAttribute("ifndef");
// load the "disabled" attribute
if (h.hasAttribute("disabled"))
enabled = false;
if (h.hasAttribute("indent"))
{ // load the "indent" attribute, make sure it's not less than 0
indent = loader.configGetAttributeInt(elt,"indent");
if (indent<0)
{ // whoops - this is an error!
logger.fatal("indent=\"" + indent + "\" is not a valid value");
throw new ConfigException("invalid indent= attribute of ");
} // end if
} // end if
// load the contents
Element x = h.getSubElement("image");
if (x!=null)
contents = new ImageItem(x);
else
contents = new TextItem(h.getElementText());
} // end constructor
LinkItem(LinkItem other, Map vars)
{
this.href = StringUtil.replaceAllVariables(other.href,vars);
this.type = other.type;
this.enabled = other.enabled;
this.target = other.target;
this.title = other.title;
this.on_click = StringUtil.replaceAllVariables(other.on_click,vars);
this.ifdef_sym = other.ifdef_sym;
this.ifndef_sym = other.ifndef_sym;
this.indent = other.indent;
this.contents = other.contents;
} // end constructor
/*--------------------------------------------------------------------------------
* Internal operations
*--------------------------------------------------------------------------------
*/
private final String getAddress(HTMLRendering html, Map vars)
{
String s = StringUtil.replaceAllVariables(href,vars);
return html.formatURL(s,type);
} // end getAddress
/*--------------------------------------------------------------------------------
* Implementations from interface MenuComponent
*--------------------------------------------------------------------------------
*/
public void render(RequestOutput out, Writer wr) throws IOException
{
this.render(out,wr,java.util.Collections.EMPTY_SET);
} // end render
public void render(RequestOutput out, Writer wr, Set defines) throws IOException
{
if ((ifdef_sym!=null) && !(defines.contains(ifdef_sym)))
return;
if ((ifndef_sym!=null) && defines.contains(ifndef_sym))
return;
HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
if (wr==null)
wr = out.getWriter();
for (int i=0; i ");
if (enabled)
{ // render the URL as an tag
wr.write("");
} // end if
else // just disable the color
wr.write(html.getFontTag(html.CONTENT_DISABLED,null));
contents.render(out,wr,defines);
if (enabled)
wr.write("");
else
wr.write("");
wr.write(" \n");
} // end render
public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
{
this.renderOnLeft(out,wr,java.util.Collections.EMPTY_SET);
} // end renderOnLeft
public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
{
if ((ifdef_sym!=null) && !(defines.contains(ifdef_sym)))
return;
if ((ifndef_sym!=null) && defines.contains(ifndef_sym))
return;
HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
if (wr==null)
wr = out.getWriter();
for (int i=0; i and tags
wr.write("" + html.getFontTag(html.LEFT_LINK,null));
} // end if
else
wr.write(html.getFontTag(html.CONTENT_DISABLED,null));
contents.renderOnLeft(out,wr,defines);
wr.write("");
if (enabled)
wr.write("");
wr.write(" \n");
} // end renderOnLeft
public String getTitle(RequestOutput out)
{
return null; // we don't have a "title" in this sense
} // end getTitle
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
final String getAddress(RequestOutput out, Map vars)
{
return this.getAddress((HTMLRendering)(out.queryService(HTMLRendering.class)),vars);
} // end getAddress
final String getAddress(RequestInput inp, Map vars)
{
return this.getAddress((HTMLRendering)(inp.queryService(HTMLRendering.class)),vars);
} // end getAddress
} // end class LinkItem